2010-01-13 10 views
16

Acabo de ver un código en bash que no entendí del todo. Al ser el novato bash scripter, no estoy seguro de lo que está pasando.

echo ${0##/*} 
echo ${0} 

Realmente no veo una diferencia en la salida en estos dos comandos (imprime el nombre del script). ¿Eso es # solo un comentario? Y qué pasa con el /*. Si es un comentario, ¿cómo es que no interfiere con el corsé de cierre }?

¿Alguien puede darme una idea de esta sintaxis?

Respuesta

28

véase la sección sobre Substring removal en el Bash-Scripting Guía avanzada:

${string##substring} 

Borra partido más largo de substring desde la parte delantera de $ cadena.

El * es un comodín, que combina con todo. El comando ${0##/*} imprime el valor de $0 a menos que comience con una barra diagonal, en cuyo caso no imprime nada.

+2

'$ {string ## substring}' elimina una subcadena literal, no $ subscring –

0

Consulte la sección Parameter Expansion de la página de manual bash(1).

15

Linux tip: Bash parameters and parameter expansions

${PARAMETER##WORD} Results in removal of the longest matching pattern from the beginning rather than the shortest. 
for example 
[[email protected] ~]$ x="a1 b1 c2 d2" 
[[email protected] ~]$ echo ${x#*1} 
b1 c2 d2 
[[email protected] ~]$ echo ${x##*1} 
c2 d2 
[[email protected] ~]$ echo ${x%1*} 
a1 b 
[[email protected] ~]$ echo ${x%%1*} 
a 
[[email protected] ~]$ echo ${x/1/3} 
a3 b1 c2 d2 
[[email protected] ~]$ echo ${x//1/3} 
a3 b3 c2 d2 
[[email protected] ~]$ echo ${x//?1/z3} 
z3 z3 c2 d2 
Cuestiones relacionadas