Bash

將部分命令行參數儲存到使用者數組中

  • September 28, 2015

我能夠做到這一點,

array=(2 46 7 4 2 1 1 1 23 4 5)
store=(${array[*]:5:5})
echo ${store[@]}  # print 1 1 1 23 4 5

現在,我不需要從使用者數組中從位置 5 提取 5 個元素,而是需要從 5及以後提取**命令行參數。**我嘗試了類似的方法,但輸出為空

store=(${$[*]:5:5})  # <----------------- Something to be changed here?
echo ${store[@]}  # EMPTY OUTPUT

任何幫助,如何從第 m 個位置開始將 n 個 args 儲存在數組中?

bash(and also zshand中,參數展開orksh93的一般形式是:Substring Expansion

${parameter:offset:length}

如果length省略了,你會得到 fromoffset到參數的結尾。

在你的情況下:

array=(2 46 7 4 2 1 1 1 23 4 5)
store=( "${array[@]:5}" )
printf '%s\n' "${store[@]}"

將從6th元素生成到最後一個元素。

$@

printf '%s\n' "${@:5}"

將生成 from$5到位置參數的結尾。

另請注意,您需要引用數組變數以防止split+glob對其元素進行運算符。


使用zsh,您可以使用另一種語法:

print -rl -- $argv[5,-1]

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