將數組值傳遞給命令參數

將數組值傳遞給命令參數

我正在嘗試編寫一個腳本,該腳本對數組的每個元素執行命令,而與數組中值的數量無關。但是,我提出的唯一解決方案如下(以命令watch為例):

watch ${ARRAY[0]}

watch ${ARRAY[1]}

watch ${ARRAY[2]}

…作為數組放置其他要觀察的命令。

顯然,這絕對不是我想要的,因為這取決於我在程式碼中編寫的數組位置的數量,這顯然是一個問題。我嘗試過類似的事情:

watch "${ARRAY[*]}"

……但是無論帶或不帶雙引號,它都不起作用。任何建議將不勝感激。

答案1

首先,你幾乎不應該使用${ARRAY[*]},無論帶或不帶引號。幾乎在所有情況下,您都應該使用"${ARRAY[@]}"(雙引號)代替。其次,您應該使用小寫或大小寫混合的變數名稱,以避免意外使用對 shell 或從中執行的程式之一具有特殊意義的名稱。

現在,對於您的實際問題:您是否嘗試運行watch一次,並將數組中元素的完整列表傳遞給它,或者您想一次為每個元素單獨運行它,還是watch為每個元素運行一個單獨的實例一次性全部元素?若要使用完整清單運行一次,請使用:

watch "${array[@]}"

要一次在每個元素上單獨運行它,請使用:

for element in "${array[@]}"; do
    watch "$element"
done

要同時對每個元素類型單獨運行它,請使用&避免等待每個watch命令完成後再開始下一個命令:

for element in "${array[@]}"; do
    watch "$element" &
done
wait   # this waits for all of the `watch` processes to exit before continuing through the script

相關內容