我有这个脚本:
#!/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[@]}"