アプリ版:「スタンプのみでお礼する」機能のリリースについて

ある本に、
bashコマンドの最後の引数は、$!#で取得できるように書いてあったのですが、
bash5系で確認してみると#が表示されてしまいます。
bash5系でのコマンドの最後の引数の取得は、どう書けば良いのでしょうか?

A 回答 (2件)

理屈がわかったので備忘録を兼ねて。



> parameter の最初の文字が感嘆符(!)であり parameter が nameref でない場合、間接参照のレベルが導入されます。
> Bashは、残りの parameter を展開することによって形成された値を新しい parameter として使用します。
> 次に、これが展開され、その値が元の parameter 展開ではなく、残りの展開で使用されます。
> これは、 indirect expansion と呼ばれます。

${!#}
→ $# を展開。 位置パラメータの個数(=$1,$2..等の最後の数字)になる
→ ${上記の数字} として展開 (=位置パラメータの最後)


$!# だと ${!}# と解釈されるのでしょう。
    • good
    • 0

その本の間違いか、あなたの読み違いでしょう。



https://runebook.dev/ja/docs/bash/special-parame …
>($!)非同期コマンドとして実行されるか、 bg 組み込みを使用するかに関係なく、バックグラウンドに最後に配置されたジョブのプロセスIDに展開されます
はありますが、 $!# はありません。


https://runebook.dev/ja/docs/bash/shell-paramete …
にも、$!#に相当するようなものはありません。
${#parameter} が配列の数を返す、くらいです。


最後の引数を取得するなら、
${parameter:offset}
${parameter:offset:length}
でoffset = -1 で取得することになるでしょう。
    • good
    • 0
この回答へのお礼

おそらく、${!#}の間違いだと思います。
ご指摘の、${@: -1}でも取得できます。

ありがとうございました。

お礼日時:2022/06/25 10:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!