Bash
如何讓“$@”在命令中間插入一個參數?
我試圖在命令中間插入一個參數以
"$@"
用於學習目的。我不知道這是否是最佳的,但這是我一直在嘗試做的。這就是我所擁有的:當我執行test.sh foo
它時echo "$@" bar
,我希望它會列印foo bar
。相反,它正在列印bar foo
. 我不知道這是否是預期的行為,也不知道我應該做什麼。test.sh foo # runs echo "$@" bar # which is printing bar foo
**編輯:**我已經簡化了上下文,實際上是在嘗試使用
"$@"
別名。
別名只是一個簡單的替換,它們本身不帶參數。所以如果你有
alias x='echo "$@" bar'
(*)並且你執行x foo
,你最終會得到echo "$@" bar foo
即,僅將別名
x
替換為內容,其餘部分留在最後。現在,這是執行"$@"
的上下文的參數列表x foo
。可能是您的互動式 shell,它通常在參數列表中沒有任何內容,因此"$@"
被刪除。但是如果你在參數列表中有一些東西(位置參數),它們會在那個位置被擴展:$ alias x='echo "$@" bar' $ set -- args here $ x foo args here bar foo
相反,如果您使用函式或腳本文件,那就可以了。這應該列印
foo bar
:f() { echo "$@" bar } f foo
應該執行類似的東西
./s.sh foo
,如果s.sh
是可執行的並且包含該echo
行。看:
(*
test
是標準命令,與 相同[ .. ]
,所以最好不要將它用於……好吧,這種測試目的。)