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
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
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
así, es aa la 'dirname ($ 0)' – jm666
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
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