Bash有条件地将字符串拆分为数组

时间:2016-10-06 18:58:19

标签: arrays bash split

我浏览了基于某个字符拆分输入的问题,但根据条件无法找出多个字符:

假设我有一个简单的bash脚本,将由空格分隔的输入拆分为数组:

echo "Terms:"
read terms            // foo bar hello world
array=(${terms// / }) // ["foo", "bar", "hello", "world"]

我想要一个额外的条件,如果术语被另一个字符封装,整个短语应该被分割为一个。

e.g。用后面的勾号封装:

echo "Terms:"
read terms            // foo bar `hello world`
{conditional here}    // ["foo", "bar", "hello world"]

2 个答案:

答案 0 :(得分:1)

read的调用指定除空格以外的分隔符:

$ IFS=, read -a array   # foo,bar,hello world
$ printf '%s\n' "${array[@]}"
foo
bar
hello world

你可能应该在-r使用read选项,但由于你不是,你可以让用户逃脱他们自己的空间:

$ read -a array    # foo bar hello\ world

答案 1 :(得分:0)

您可以将输入传递给函数并使用$@来构建数组:

makearr() { arr=( "$@" ); }

makearr foo bar hello world
# examine the array
declare -p arr
declare -a arr='([0]="foo" [1]="bar" [2]="hello" [3]="world")'

# unset the array
unset arr

makearr foo bar 'hello world'
# examine the array again
declare -p arr
declare -a arr='([0]="foo" [1]="bar" [2]="hello world")'