Bash

如何將 arg 添加到 $@?

  • July 21, 2019

我希望能夠... && add-arg 'something'在位置參數中添加“某些東西”,有點像 inverse shift

我試過... && 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"很好地定義為單個字元串)。然而,這不是您在這種情況下想要做的,因為它會將您的值列表折疊為一個值。

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