我有这个脚本:
#!/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
- 循环不是我正在寻找的。 p>
答案 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')