サブシェルでトレース (set -x)

サブシェルでトレース (set -x)

組み込み式はset -xトレースを有効にして、ワイルドカードの後に​​実行する前に各コマンドを印刷します。私が疑問に思うのは、set -xさまざまな状況で提供される出力の違いです。

走ってみるbash -c 'set -x; echo "hello"'と見えますが…

+ echo hello
hello

走ってみるbash -c '(set -x; echo "hello")'と見えますが…

+ echo hello
hello

走ってみるbash -c 'hi=$(set -x; echo "hello")'と見えますが…

++ echo hello

+最後のケースになぜ二重があるのか​​知っている人はいますか?

ベストアンサー1

引用するバッシュマニュアルのためset -x

拡張後および実行前の引数または関連する単語のリストとともに、単純なコマンド、forコマンド、caseコマンド、コマンド、および算術コマンドのトレースを印刷します。select変数forの値PS4が拡張され、結果の値がコマンドおよび拡張引数の前に印刷されます。

PS4はい~と記述:

このパラメーターの値は次のように拡張されます。PS1-x拡張値は、オプションが設定されたときにコマンドラインをエコーする前に印刷されるプロンプトです(参照:組み込みコレクション)。拡張値の最初の文字は、複数レベルの間接参照を表すために必要なだけコピーされます。デフォルトは " +"です。

反復+記号は間接参照レベルを示します。

  • set -x; echo "hello"単一レベルで動作します。
  • hi=$(set -x; echo "hello")2つとして実行:交換に使用されるサブシェル環境は2番目のレベルです。

set -x間接参照レベルは、コマンドが実行されるレベルでは計算されず、「デフォルト」シェルで計算されます。

この文字の複製は Bash にのみ適用されます。他のシェルはこのようにシェルの深さを表示しません。

おすすめ記事