Eine StackOverflow- Antwort mit> 3.5K Stimmen enthält diesen Einzeiler für die Zuordnung zum DIR
Verzeichnis des aktuellen Bash-Skripts:
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
Ich bin verwirrt über die geschachtelten Anführungszeichen. Soweit ich das beurteilen kann, werden folgende Fragmente in doppelte Anführungszeichen gesetzt:
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
... und alles andere rechts vom =
(dh $( dirname
und )
) ist nicht zitiert. Mit anderen Worten, ich gehe davon aus, dass das 2., 4. und 6. "
Zeichen das 1., 3. bzw. 5. "
Zeichen "schließt" .
Ich verstehe, was die doppelten Anführungszeichen "${BASH_SOURCE[0]}"
bewirken, aber wozu dienen die beiden anderen doppelten Anführungszeichen?
Wenn andererseits (und trotz der hohen Stimmenzahl) das obige Snippet falsch ist, wie kann man dann seine nominelle Absicht erreichen?
(Mit nominaler Absicht meine ich: sammeln Sie den Wert, der von zurückgegeben wurde, pwd
nachdem Sie zuerst cd
in das Verzeichnis von zurückgegeben haben dirname "${BASH_SOURCE[0]}"
, und führen Sie das cd
-ing in einer Sub-Shell aus, so dass der Wert $PWD
der übergeordneten Shell unverändert bleibt.)
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
funktioniert auch.
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
.