【发布时间】:2019-02-08 07:27:29
【问题描述】:
我正在尝试在 bash 中构建对程序的(复杂的)调用。
程序需要一个文件列表,其中文件名可能包含空格。
我构造调用如下:
for VAR in $ARR; do
CALL_ARGS+=" \"${VAR}.csv\""
done
然后用./program ${CALL_ARGS}调用程序
例如,当$VAR 是"a b c" 时,我想要./program "a b c",但我得到的是'"a' b 'c.csv"',这显然是错误引用的。
我已经在 StackOverflow 上看到了一些类似的问题/答案,但似乎没有一个适用于我的问题。
【问题讨论】:
-
文件列表是否作为单独的参数传递给您的脚本?然后只需使用
./program "$@"即可。 -
不,不是。我通过调用许多不同的程序来构建列表。
-
可以和
set -- "$@" "$file"一一添加到位置参数吗? -
在普通变量中存储列表永远不会正确;改用数组。有关动态生成 arg 列表的示例,请参阅 this previous question,有关一般信息,请参阅 BashFAQ #50。顺便说一句,
$ARR(它似乎不是一个数组)和$CALL_ARGS都有这个问题,您需要修复 both 才能正常工作。哦,避免使用eval的诱惑——那样会带来疯狂和真正奇怪的错误。