最後のコマンドライン引数を取得するために、$ {!#}はbashでどのように機能しますか?


19

Advanced Bash-Scripting Guideから、最後のコマンドライン引数を取得するには:

または:lastarg=${!#} これは 、変数への間接参照$#です。動作しない
ことに注意しlastarg=${!$#}てください。


4
余談ですが、ABSは参照として非常に眉をひそめています。irc.freenode.org#bashチャンネルのファクトイドの歴史については、wooledge.org /〜greybot / meta / absを参照してください。バッシュ・ハッカーのWikiWooledge BashGuideは不正確の密度のための悪名高いようではありません。後者では、間接参照はBashFAQ#6で詳細に説明されています。前者では、wiki.bash-hackers.org / syntax / pe#indirection
チャールズダフィー

1
質問:!$シンプルで同じではありませんか?
-unxnut

回答:


27

それが言うように、それは間接的な参照です。次の例をご覧ください。

$ var=test
$ test='Hello, world'
$ echo ${!var}
Hello, world

ここで、次の定位置パラメーターを設定する場合:

$ set -- one two three

そして$#、位置パラメータの総数を表します:

$ echo $#
3

これは、次のような${!#}名前のパラメーターの値を指定すると言っているように呼び出す場合を意味します3

$ echo ${!#}
three
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.