コマンド置換による割り当てに二重引用符を入れ子にする

コマンド置換による割り当てに二重引用符を入れ子にする

スタックオーバーフロー回答3.5K以上のテーブルを取得した人は、この1行を使用してDIR現在のbashスクリプトのディレクトリを割り当てました。

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

入れ子になった二重引用符が混乱しています。私が知っている限り、次のスニペットは二重引用符で囲まれています。

"$( cd "
"${BASH_SOURCE[0]}"
" && pwd )"

=...(つまりand)$( dirname右側の他のすべての項目は)引用されません。つまり、2番目、4番目、6番目の"文字がそれぞれ1番目、3番目、5番目の"文字を「閉じる」と仮定します。

二重引用符が何であるかを理解します"${BASH_SOURCE[0]}"。しかし、他の2組の二重引用符の目的は何ですか?

一方、高い投票にもかかわらず、上記のコードが間違っている場合、名目上の意図を達成する正しい方法は何ですか?

(通過名目上の意図pwd私の言葉は、最初の-ingによって返された値をcd返されたディレクトリにdirname "${BASH_SOURCE[0]}"集め、サブシェルで-ingを実行して親シェルが変更されないようにするcdことです。$PWD

ベストアンサー1

と入力すると、$(...)最初から引用が始まります。

つまり"..."$(...)お互いの中。コマンド置換には$(...)1つ以上を含めることができます。十分二重引用符で囲まれた文字列。さらに、二重引用符で囲まれた文字列には、1つ以上の文字列を含めることができます。十分コマンドの置き換え。 しかし、彼らは互いに絡み合っていません。 したがって、コマンド置換内で始まる二重引用符文字列は、コマンド置換の外部には拡張されず、その逆も同様です。

したがって、次の点を考慮してください。

DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

中に含まれる内容物は$(...)次のとおりです。

dirname "${BASH_SOURCE[0]}"

上には${BASH_SOURCE[0]}二重引用符があります。外部二重引用符または一重引用符は二重引用符であるかどうか$(...)を判断する際には${BASH_SOURCE[0]}関係ありません。

外層には以下が$(...)含まれます。

cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd

ここでは、式を$( dirname "${BASH_SOURCE[0]}" )二重引用符で囲みます。$(...)外部に引用文があるという事実は、内部の内容を考慮すると関係がありません。内部に引用符があるという事実$(...)も不適切です。

二重引用符が一致する方法は次のとおりです。

ここに画像の説明を入力してください。

おすすめ記事