最後の定位置パラメーターを設定しようとしている間に/bin/dash
、試しましたecho ${$#}
。驚いたことに、これはエラーにならず、$$
変数の内容と同じPIDになりました。質問、なぜその構文が機能したのですか?ここでシェルが適用した構文規則は何ですか?
基本的に、私がしたことは
$ set 1 2 3 4 5
$ echo ${$#}
13819
$ echo $$
13819
どうやら、%
文字もそのような構成では無視されます
$ echo ${$%}
13819
しかし、*
と@
悪い置換誤りが発生:
$ echo ${$*}
sh: 10: Bad substitution
$ echo ${$@}
sh: 11: Bad substitution
@Kusalananda期待はありません。私は他のキャラクターを試してみました
—
セルギーコロディアズニー
#
、%
そしてそれらからどのような行動が起こります。
—
wjandrea
@wjandreaうん、すでにそれを知っている。実際には既に質問があります:stackoverflow.com/questions/1853946 / ...最初に質問を読まずに自分でメソッドを見つけようとしました(そして、
—
Sergiy Kolodyazhnyy
for i; do true; done
最後のアイテムを入れることは既に知っていました$i
)が、もっとエレガントなものを探していました。eval
もちろん、潜在的な問題を抱えている可能性があり、どの程度まで考えられます-それは別のトピックです。しかし、はい、それはオプションだ
${$*}
し${$@}
、生産しますか?