脚本中带引号的bash参数

脚本中带引号的bash参数,bash,quotes,Bash,Quotes,我试图在bash中构造一个(复杂的)程序调用 程序需要一个文件列表,其中文件名可能包含空格 我将调用构造如下: for VAR in $ARR; do CALL_ARGS+=" \"${VAR}.csv\"" done 然后用/program${call_ARGS} 例如,当$VAR是“abc”时,我想让/program“abc”,但我得到的是““abc.csv”,这显然是错误的引用 我已经在StackOverflow上看到了一些类似的问题/答案,但似乎没有一个适用于我的问题。处理Ba

我试图在bash中构造一个(复杂的)程序调用

程序需要一个文件列表,其中文件名可能包含空格

我将调用构造如下:

for VAR in $ARR; do
    CALL_ARGS+=" \"${VAR}.csv\""
done
然后用
/program${call_ARGS}

例如,当
$VAR
“abc”
时,我想让
/program“abc”
,但我得到的是
““abc.csv”
,这显然是错误的引用


我已经在StackOverflow上看到了一些类似的问题/答案,但似乎没有一个适用于我的问题。

处理Bash中可能包含空格(或各种其他字符)的项目列表的最简单和最安全的方法是使用数组。例如:

files=('a b c' 'd e' f)
args=()

for f in "${files[@]}" ; do
    args+=( "$f".csv )
done

./program "${args[@]}"

文件列表是否作为单独的参数传递给脚本?然后简单地使用
/program“$@”
做正确的事情。不,不是。我通过调用许多不同的程序来构造列表。你能用
set--“$@”“$file”
”将它们逐个添加到位置参数中吗?将列表存储在普通变量中永远不会正常工作;改用数组。有关动态生成参数列表的示例和常规信息,请参见。顺便说一句,您的
$ARR
(看起来不是数组)和
$CALL\u ARGS
都有这个问题,您需要修复这两个问题才能正常工作。哦,还要避免使用
eval
——这样就有了疯狂和真正奇怪的bug。