我浏览了基于某个字符拆分输入的问题,但根据条件无法找出多个字符:
假设我有一个简单的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"]
答案 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")'