我正在尝试拆分一个字符串,其中两个单词用空格分隔,这段代码对我不起作用:
$ cat > test.sh
#/bin/bash
NP="3800 480"
IFS=" "
echo $NP
echo $NP | read VAR1 VAR2
echo "Var1 : $VAR1"
echo "Var2 : $VAR2"
exit 0
调用它给了我:
$ chmod 755 ./test.sh && ./test.sh
3800 480
Var1 :
Var2 :
我希望看到的地方:
3800 480
Var1 : 3800
Var2 : 480
如何在bash脚本中拆分这样的简单字符串?
编辑:(我用过的答案) 感谢jw013提供的链接,我能够提出这个适用于bash 2.04的解决方案:
$ cat > test.sh
#!/bin/bash
NP="3800 480"
read VAR1 VAR2 << EOF
$NP
EOF
echo $VAR2 $VAR1
$./test.sh
480 3800
答案 0 :(得分:3)
问题是管道涉及到fork,因此您需要确保脚本的其余部分在执行读取的shell中执行。
只需添加( ... )
,如下所示:
. . .
echo $NP | (read VAR1 VAR2
echo "Var1 : $VAR1"
echo "Var2 : $VAR2"
exit 0
)
答案 1 :(得分:3)
使用bash,您可以使用<<<
(“here string”,从字符串重定向输入):
$ NP="3800 480"
$ read VAR1 VAR2 <<< $NP # NB, variable is not quoted
$ echo $VAR2 $VAR1
480 3800
答案 2 :(得分:2)
#!/bin/bash
NP="3800 480"
IFS=" "
array=($NP)
echo ${array[0]}
echo ${array[1]}
也可以使用
答案 3 :(得分:2)