晚上好,人们
目前我有一个名为inputArray的数组,它将输入文件逐行存储7行。我有一个单词70000($s0)
,如何将单词拆分为70000& ($ s0)分开?
我看了一下这个网站上的答案,但我无法理解,我看到的答案是:
s='1000($s3)'
IFS='()' read a b <<< "$s"
echo -e "a=<$a>\nb=<$b>"
给出输出a=<1000> b=<$s3>
答案 0 :(得分:1)
让我试一试。
在某些情况下,shell将执行“单词拆分”,其中一串文本被分解为单词。单词边界由IFS
变量定义。 IFS的默认值为:space,tab,newline。当要将字符串拆分为单词时,将删除此字符集的任何序列以提取单词。
在您的示例中,分隔单词的字符集为(
和)
。因此,该字符串中由IFS字符集限定的单词为1000
和$s3
什么是<<< "$s"
?这是一个here-string。它用于将字符串发送到某个命令的标准输入。这就像在做
echo "$s" | read a b
除了表单在bash中没有按预期工作。 read a b <<< "$s"
效果很好。
现在,分词发生的情况是什么?一个是变量是不加引号的。演示:
IFS='()'
echo "$s" | wc # 1 line, 1 word and 10 characters
echo $s | wc # 1 line, 2 words and 9 characters
read
命令还将字符串拆分为单词,以便将单词分配给命名变量。变量a
获得第一个单词,b
获得所有其余单词。
命令分解为:
IFS='()' read a b <<< "$s"
# ^^^^^^^ 1
# ^^^^^^^^ 2
# ^^^^^^^^ 3
read
命令的持续时间内,为变量IFS
分配值()
"$s"
发送到read
的stdin $IFS
将输入拆分为单词:将第一个单词分配给变量a
,将其余字符串分配给变量b
。来自字符串末尾的$IFS
的尾随字符将被丢弃。文档:
read
command 希望有所帮助。