将 Bash 数组作为参数传递

将 Bash 数组作为参数传递

我有这个脚本:

#!/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[@]}"

相关内容