3.5Kを超える票を含むStackOverflowの回答にDIR
は、現在のbashスクリプトのディレクトリに割り当てるためのこの1つのライナーが含まれています。
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
ネストされた二重引用符に困惑しています。私が知る限り、次のフラグメントは二重引用符で囲まれています。
"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"
...そして、=
($( dirname
および)
)の右側にある他のものはすべて引用符で囲まれていません つまり、2番目、4番目、および6 "
番目の"
文字は、それぞれ1番目、3番目、および5 番目の文字を「閉じる」と仮定します。
二重引用符で"${BASH_SOURCE[0]}"
何が達成されるのか理解していますが、他の2組の二重引用符の目的は何ですか?
一方、(および高い得点にもかかわらず)上記のスニペットが正しくない場合、名目上の意図を達成する正しい方法は何ですか?
(名目上の意図ではpwd
、最初にcd
-ingの後に返された値をで返されたディレクトリに収集dirname "${BASH_SOURCE[0]}"
し、cd
サブシェルで-ing を実行し$PWD
、親シェルのが変更されないようにします)。
lsb_dist="$(. /etc/os-release && echo "$ID")"; echo "$lsb_dist"
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
。同様に機能します。
$( here, it's a subshell, but you are writing code as if you were writing it on the "first level" of the shell .... )
。