"$@"
学習のために命令の途中にパラメータを挿入しようとしています。これが最適なのかはわかりませんが、これが私がやろうとしていたのです。これが私が持っているものです:私がそれを実行すると、私が印刷したいものがtest.sh foo
実行されます。代わりに印刷中です。これが期待される動作かどうかを知りません。echo "$@" bar
foo bar
bar foo
test.sh foo
# runs
echo "$@" bar
# which is printing
bar foo
編集する:コンテキストを単純化し、実際に使用しようとしています。"$@"
エイリアスとして。
答え1
エイリアスは単なる置換であり、独自にパラメータを使用しません。したがってalias x='echo "$@" bar'
、(*)があり、実行すると、x foo
次のようになります。
echo "$@" bar foo
つまり、x
エイリアスをコンテンツに置き換え、残りの部分を最後に保ちます。今、"$@"
実行コンテキストのパラメータのリスト。x foo
。通常、引数リストに何もない対話型シェルが削除された可能性が"$@"
あります。ただし、パラメータリスト(位置パラメータ)に項目がある場合は、その場所で展開されます。
$ alias x='echo "$@" bar'
$ set -- args here
$ x foo
args here bar foo
代わりに関数やスクリプトファイルを使用しても問題ありません。次のように印刷する必要がありますfoo bar
。
f() {
echo "$@" bar
}
f foo
asは次のように実行する必要があります./s.sh foo
。 ifs.sh
は実行可能で、対応するecho
行を含みます。
望むより:
(*はtest
のような標準コマンドなので[ .. ]
...まあ、この種のテスト目的には使用しない方が最善です。)