Bash

將數組轉換為命令的參數?

  • January 21, 2012

我有一個命令的“選項”數組。

my_array=(option1 option2 option3)

我想在 bash 腳本中呼叫此命令,使用數組中的值作為選項。所以,command $(some magic here with my_array) "$1"變成:

command -option1 -option2 -option3 "$1"

我該怎麼做?可能嗎?

我更喜歡一種簡單的bash方式:

command "${my_array[@]/#/-}" "$1"

造成這種情況的一個原因是空間。例如,如果您有:

my_array=(option1 'option2 with space' option3)

基於sed的解決方案會將其轉換為-option1 -option2 -with -space -option3(長度 5),但上述bash擴展會將其轉換為-option1 -option2 with space -option3(長度仍為 3)。很少,但有時這很重要,例如:

bash-4.2$ my_array=('Ffoo bar' 'vOFS=fiz baz')
bash-4.2$ echo 'one foo bar two foo bar three foo bar four' | awk "${my_array[@]/#/-}" '{print$2,$3}'
two fiz baz three

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