2011-06-18 8 views
40

estoy tratando de entender un script de prueba, que incluye los siguientes segmentos:

SCRIPT_PATH=${0%/*} 
if [ "$0" != "$SCRIPT_PATH" ] && [ "$SCRIPT_PATH" != "" ]; then 
    cd $SCRIPT_PATH 
fi 

¿Qué representa el ${0%/*} para? Gracias

Respuesta

60

Se llama Parameter Expansion. Eche un vistazo a this page y el resto del sitio.

Lo que hace es ${0%/*}, se expande el valor contenido en el argumento 0 (que es el camino que llama la secuencia de comandos) después de quitar el sufijo cadena /* desde el final de la misma.

Por lo tanto, $0 es lo mismo que ${0} que es como cualquier otro argumento, por ej. $1 que puede escribir como ${1}. Como dije, $0 es especial, ya que no es un argumento real, siempre está ahí y representa el nombre del script. La expansión de parámetros funciona dentro de {} - llaves, y % es un tipo de expansión de parámetros.

%/* coincide con la última aparición de / y elimina cualquier cosa (* significa cualquier cosa) después de ese carácter. Echar un vistazo a este sencillo ejemplo:

$ var="foo/bar/baz" 
$ echo "$var" 
foo/bar/baz 
$ echo "${var}" 
foo/bar/baz 
$ echo "${var%/*}" 
foo/bar 
+2

así, es aa la 'dirname ($ 0)' – jm666

+5

en este guión, sí, funciona como 'dirname "$ 0"' pero podría causar problemas. Si llamó al script de esta manera: 'bash script',' $ {0/*} 'no le da la ruta, devuelve el nombre del script, o si usted especificó la ruta completa (_/path/to/script_) no devuelve nada, por lo que no se garantiza que funcione como se espera en todas las situaciones. – c00kiemon5ter

+0

Estaba ocupado escribiendo una pregunta sobre el superusuario sobre una línea que tiene esto, escribí en mi pregunta que generalmente escribía partes del código en google para obtener un resultado, pero aparentemente lo olvidé, pero tan pronto como terminé mi pregunta y lo analizó antes de publicarlo, busqué en Google '$ {0%}' y llegué aquí, me lo has dejado claro :) – SidOfc

Cuestiones relacionadas