我正在尝试编写一个脚本,它对数组中的每个元素执行一个命令,而与数组中的值数量无关。但是,我想到的唯一解决方案如下(以命令为例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