将数组值传递给命令args


0

我正在尝试编写一个脚本,该脚本对数组的每个元素执行命令,而与数组中的值数量无关。但是,我想出的唯一解决方案如下(以watch命令为例):

watch ${ARRAY[0]}

watch ${ARRAY[1]}

watch ${ARRAY[2]}

…在数组中放置了要监视的其他命令。

显然,这绝对不是我想要的,因为这取决于我在代码中编写的数组位置的数量,这显然是一个问题。我已经尝试过类似的东西:

watch "${ARRAY[*]}"

…但是不管有没有双引号,它都行不通。任何建议将不胜感激。

Answers:


3

首先,几乎不要使用${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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.