Una respuesta de StackOverflow con> 3.5K votos presenta esta línea para asignar al DIR
directorio del script bash actual:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Estoy desconcertado por las comillas dobles anidadas. Por lo que puedo decir, los siguientes fragmentos están entre comillas dobles:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... y todo lo demás a la derecha de =
(es decir, $( dirname
y )
) no está entre comillas. En otras palabras, supongo que los caracteres segundo, cuarto y sexto "
"cierran" los caracteres primero, tercero y quinto "
, respectivamente.
Entiendo lo que "${BASH_SOURCE[0]}"
logran las comillas dobles , pero ¿cuál es el propósito de los otros dos pares de comillas dobles?
Si, por otro lado (y a pesar del alto puntaje de voto), el fragmento anterior es incorrecto, ¿cuál es la forma correcta de lograr su intención nominal?
(Por intención nominal quiero decir: recopilar el valor devuelto por pwd
después de primero cd
en el directorio devuelto por dirname "${BASH_SOURCE[0]}"
, y hacer el cd
-ing en un sub-shell, para que el $PWD
del shell principal permanezca sin cambios).
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
funciona.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.