
我正在嘗試編寫一個腳本,該腳本對數組的每個元素執行命令,而與數組中值的數量無關。但是,我提出的唯一解決方案如下(以命令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