脚本中带引号的bash参数
我试图在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
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。