如何强制read命令正确解析引号内的数组参数?

时间:2014-01-16 12:55:08

标签: bash

我有这个脚本:

#!/usr/bin/env bash

read -p "Provide arguments: " -a arr <<< "foo \"bar baz\" buz"
for i in ${arr[@]}
do
    echo $i
done

错误地输出:

foo
"bar
baz"
buz

如何解释用户输入以使引号内的参数成为单个数组元素?像这样:

foo
bar baz
buz

修改: 要明确:我不希望用户在单独的行中输入每个元素,因此read - 循环不是我正在寻找的。

1 个答案:

答案 0 :(得分:2)

最好使用不同的分隔符提供用户输入,例如;

OLDIFS=$IFS
IFS=$';'
read -p "Provide arguments: " -a var
for i in "${!var[@]}"
do
    echo Argument $i: "${var[i]}"
done
IFS=$OLDIFS

执行时:

Provide arguments: foo;bar baz;buz
Argument 0: foo
Argument 1: bar baz
Argument 2: buz

另外修改变量:

echo Argument $i: $(echo "${var[i]}" | sed -e 's/^ *//g' -e 's/ *$//g')