0
for i in "a" "a b"; do
    echo $i;
done

回声:

a
a b

我怎样才能写出类似的东西for i in $input; do并分配"a" "a b"input?空格很重要。否则$(echo ...)会工作。

编辑:问题不是关于文件,也不是关于一些输入,可以使用$@.

4

2 回答 2

4

由于您使用的是 bash,因此您可以这样做:

input=("a" "a b")

for i in "${input[@]}"; do
  echo $i
done
于 2012-06-06T23:11:00.337 回答
1

这只能通过"$@"命令行参数的构造可移植地完成。

但是,如果您不再需要实际的命令行参数,则可以使用set来替换它们的内容:

input='"a" "a b"'
eval set fnord $input
shift
for i in "$@"; do
    echo $i
done

您应该意识到,仅仅提出这个问题就表明您正在接近复杂程度,您应该切换到限制较少的脚本语言(Perl 和 Python 是通常的选择)。

于 2012-06-06T23:22:24.883 回答