![将 Bash 数组作为参数传递](https://linux22.com/image/728818/%E5%B0%86%20Bash%20%E6%95%B0%E7%BB%84%E4%BD%9C%E4%B8%BA%E5%8F%82%E6%95%B0%E4%BC%A0%E9%80%92.png)
我有这个脚本:
#!/bin/bash -x
NEW_ARGS=()
for (( i=1; i <= "$#"; i++ )) do
if [ -f "${!i}" ]; then
NEW_ARGS+=" $(basename ${!i})"
else
NEW_ARGS+=" ${!i}"
fi
done
wine /usr/local/bin/red-063.exe ${NEW_ARGS[@]}
注意 中的前导空格NEW_ARGS+=" ${!i}"
。
如果我不这样做,${NEW_ARGS[@]}
则会将其连接起来并作为一个参数传递给wine /usr/local/bin/red-063.exe
,例如:
redwin -t -f /home/mark/projects/learn/red_learn/a.red
...
wine /usr/local/bin/red-063.exe -t-fa.red
我可以添加这些空格,但感觉“不自然”。有没有办法将数组传递给 Bash 中的命令,就像传递 一样$*
?
答案1
向数组中添加新元素,而不是连接第一个元素中的所有内容:
NEW_ARGS+=("$(basename ${!i})")
NEW_ARGS+=("${i}")
然后逐个元素地传递整个数组:
wine /usr/local/bin/red-063.exe "${NEW_ARGS[@]}"