将由空格分隔的Bash字符串转换为数组

4
我希望将读取的值与空格分开,然后根据数组的部分执行操作。更确切地说,如果第一个(如果为假则跳过其余部分)3个元素的语句将更改为使用另一个程序(查找数据库)将单词转换为数字,第4个和最后一个将检查是否存在非数字或大于64的数字,如果没有,则将它们全部组合在一起(我知道如何做),然后继续进行。我已经在谷歌等多个网站上花费了超过3个小时的时间来解决这个问题。
vzybilly@vzybilly-laptop:~/Desktop$ cat ./test.sh
#!/bin/bash
read -p "cmd: " IN

#OIFS=$IFS
#IFS=';'
#arr2=$IN

#a=$(echo $IN | tr " " "\n")
a=$(echo "$IN")
for i in $(seq 0 $((4 - 1))); do
    echo "a[$i] = \"${a[$i]}\""
done

#IFS=$OIFS

exit 0
vzybilly@vzybilly-laptop:~/Desktop$ ./test.sh
cmd: cmd pers item num
a[0] = "cmd pers item num"
a[1] = ""
a[2] = ""
a[3] = ""

我想要的是:

vzybilly@vzybilly-laptop:~/Desktop$ ./test.sh
cmd: cmd pers item num
a[0] = "cmd"
a[1] = "pers"
a[2] = "item"
a[3] = "num"
1个回答

5

替代

a=$(echo "$IN")

使用

a=($IN)

vzybilly@vzybilly-laptop:~/Desktop$ ./test.sh 命令:命令个人项目编号 ./test.sh: 第9行:cmd:找不到命令 a[0] = "" a[1] = "" a[2] = "" a[3] = "" - vzybilly
1
你是否不小心写成了 a=$($IN) 而不是 a=($IN)?我的命令不应该执行任何东西;而 $() 会执行一些操作。 - Amadan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接