実際に答えるのではなく、強迫的にあれこれ言葉だけを削除せず、誰が答えてくれたら本当に感謝します。
コマンドがあります。
#/bin/sh
while :; \
do sleep 6h & wait $${!}; \
$$は2番目のプロセスであるSLEEPを参照しますか?それはどういう意味ですか${!}
?構文がわからない。つまり、フローは理解していますが、$$記号が2つある理由と{!}の用途を正確に知ることはできません。
私の質問を削除する前に誰でも私に目覚めさせていただきありがとうございます。ありがとうございます。
ベストアンサー1
公式文書には次のように記載されています。
($!)非同期コマンドで実行されるか、bg組み込み関数を使用して最後にバックグラウンドに挿入されたジョブのプロセスIDに展開されます(ジョブ制御組み込み関数を参照)。
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameters
そして$${!}
すべて${!!}
エラーです。
公開されているようにスクリプトを実行すると、次のエラーが発生します。
./tst.sh: line 3: wait: `1234{!}': not a pid or valid job spec
ここで、1234はシェル自体のpidであり、$$
文字列{!}
定数です。
構文的には${!!}
正確ですが、変数を間接的に拡張しようとしますが、!
これらの変数は実際には存在できないため、エラーは次のとおりです。${!!}: bad substitution
間接的な説明は次のとおりです。 https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
そのコードがある場合(含む$${!}
)実際に働く。その場合、これはシェルスクリプトではなく、他の言語に含まれるシェルスクリプトである可能性が高いです。変数を表示するためにも使用されます$
。これらの言語のほとんどは、繰り返されるドル記号をエスケープ記号として使用するため、$$anything
ホスト言語がこれをシェルスクリプトを含む文字列に完成した後になります。$anything