Bash
如何將 arg 添加到 $@?
我希望能夠
... && add-arg 'something'
在位置參數中添加“某些東西”,有點像 inverseshift
。我試過
... && set "$@ something"
了,但這不起作用,雖然只是做set "$@ something"
(沒有條件)似乎工作正常。
zsh
具體來說,除了@Kusalananda顯示的標準set -- "$@" ...
之外,位置參數也可以通過$argv
數組獲得(如在 csh 中),因此您還可以執行以下操作:argv+=arg # append one argument to the end argv+=(arg2 arg3) # append several arguments argv[1,0]=(arg1 arg2) # insert in front argv[3,0]=(x) # insert before the 3rd element 2+=(x) # same as above (insert after the 2nd) 2+=x # append x to the second argument (not to confuse with # the above). argv[2,5]=(y) # replace 4 elements 2 to 5 with one y argument argv[3,-1]=() # truncate 1=() # same as "shift"
在任何 POSIX shell 中,
set -- "$@" "value"
將添加
value
到位置參數列表的末尾(它實際上會用新的更長的列表替換列表),並且set -- "value" "$@"
將在開頭添加它(從技術上講,這與 a 的相反,
shift
因為它shift
刪除了第一個元素)。這適用於zsh
.
--
用於保護以下值不被意外解釋為選項,以防它們以-
.特殊變數
$@
幾乎被專門使用,"$@"
因為它會擴展為每個單獨引用的位置參數的值。該表達式"$@ somethingelse"
將擴展為單獨引用的位置參數列表,<space>somethingelse
並附加到它們的最後一個。要將位置參數的值用作由空格分隔的單個字元串
$IFS
(或任何可能的第一個字元),請使用"$*"
("$* somethingelse"
很好地定義為單個字元串)。然而,這不是您在這種情況下想要做的,因為它會將您的值列表折疊為一個值。