Bash

如何讓“$@”在命令中間插入一個參數?

  • August 9, 2021

我試圖在命令中間插入一個參數以"$@"用於學習目的。我不知道這是否是最佳的,但這是我一直在嘗試做的。這就是我所擁有的:當我執行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是標準命令,與 相同[ .. ],所以最好不要將它用於……好吧,這種測試目的。)

引用自:https://unix.stackexchange.com/questions/660399