${!#}はシェルスクリプトで何を意味しますか? [コピー]

${!#}はシェルスクリプトで何を意味しますか? [コピー]

これは、次に始まる難読化された悪意のあるシェルスクリプトで発見されました。

${!#}${*^} <<<...

ペアへの参照が見つかりませんが、${!#}echod」が印刷された場合は、-bash実行中のシェルへの秘密参照ですか?では、なぜ追加のダッシュを使用するのですか?

ありがとうございます!

答え1

この回答はでbash試したので具体的です。すべてのシェルが同じように機能するわけではありません。echobash

bash$var1そうであればとfoo同じ${!var1}です$foo!これは間接拡張bash:与えられた変数aで検索します。変数名( foo) 変える

次に、パラメータの数var1をに置き換えます#。 0$#ならそうです。 4ならそうです。つまり、位置引数がどんなに多くても、最後の位置引数です。 $#${!#}$0$#${!#}$4${!#}

位置引数がない場合、結果はです$#。これはシェルまたはスクリプトの名前です(0$0引用する)。あなたが思う限り、それはbash(プラス先頭-これはログインシェルであることを意味します。)

クイックテスト:

$ echo ${!#}
-bash

$ set the quick brown fox

$ echo ${!#}
fox

関連情報