Bash
將數組轉換為命令的參數?
我有一個命令的“選項”數組。
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