GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué hace % en las cadenas de shell de Linux?

Cuando % se usa en el patrón ${variable%substring} devolverá el contenido de variable con la ocurrencia más corta de substring eliminado de la parte posterior de variable .

Esta función admite patrones de comodines, por eso acepta estrellas (asterisco) como sustituto de cero o más caracteres.

Debe mencionarse que esto es específico de Bash:otros shells de Linux no necesariamente contienen esta función.

Si desea obtener más información sobre la manipulación de cadenas en Bash, le sugiero que lea esta página. Entre otras funciones útiles, por ejemplo, explica qué hace %% hacer :)

Editar:olvidé mencionar que cuando se usa en el patrón $((variable%number)) o $((variable1%$variable2)) el % El carácter funcionará como operador de módulo. DavidPostill tiene enlaces de documentación más específicos en su respuesta.

Cuando % se usa en un contexto diferente, debe reconocerse solo como un carácter normal.


Manual de referencia de Bash:Expansión de parámetros de Shell

${parameter%word}
${parameter%%word}

La palabra se expande para producir un patrón como en la expansión de nombre de archivo. Si el patrón coincide con una porción final del valor expandido de parámetro , entonces el resultado de la expansión es el valor del parámetro con el patrón coincidente más corto (el ‘%’ caso) o el patrón coincidente más largo (el ‘%%’ caso) eliminado. Si parámetro es ‘@’ o ‘*’, la operación de eliminación de patrón se aplica a cada parámetro posicional por turno, y la expansión es la lista resultante. Si parámetro es una variable de matriz subíndice con ‘@’ o ‘*’, la operación de eliminación de patrón se aplica a cada miembro de la matriz por turnos, y la expansión es la lista resultante.


Experimentando, encuentro que una coincidencia después de % se descarta, cuando la cadena está encerrada entre corchetes (llaves).

Para ilustrar:

touch abcd         # Create file abcd

for file in ab*; do
 echo $file        # echoes the filename
 echo $file%       # echoes the filename plus "%"
 echo ${file%}     # echoes the filename
 echo "${file%}"   # echoes the filename
 echo
 echo "${file%c*}" # Discard anything after % matching c*
 echo "${file%*}"  # * is not greedy
 echo ${file%c*}   # Without quotes works too
 echo "${file%c}"  # No match after %, no effect
 echo $file%c*     # Without {} fails
done

Aquí está la salida:

abcd
abcd%
abcd
abcd

ab
abcd
ab
abcd
abcd%c*

Linux
  1. ¿Qué es un usuario de Linux?

  2. Linux – ¿Qué hace 'hacer Localmodconfig'?

  3. Linux:¿qué hace la opción "nointremap" de Linux?

  4. ¿Qué hace Echo $? ¿¿Hacer??

  5. ¿Qué significa el promedio de carga en Unix/Linux?

¿Qué es el Shell en Linux?

¿Qué significa el comando Cat en Linux?

¿Qué significa ser "sh compatible"?

¿Qué es Subshell en Linux?

¿Qué es Login Shell en Linux?

¿Qué es Shebang en Linux Shell Scripting?