Bash:将带空格字符串拆分为两个变量的最简实现方法
最简Bash实现方法
你的问题出在对进程替换的误用上:<<($line) 会把变量里的内容当作命令去执行,所以bash会尝试运行foo这个不存在的命令,这就是报错的原因。
要把字符串拆分成两个变量,最简且可靠的写法是使用here-string(<<<),它能直接把字符串作为read的输入:
line="foo bar" read foo bar <<< "$line"
执行完之后,$foo的值就是foo,$bar的值就是bar,而且这个操作是在当前shell环境下完成的,后续可以直接使用这两个变量。
如果你的场景允许子shell(比如只是在管道里临时用变量),也可以用管道写法,但要注意子shell的变量无法传递到父shell:
echo "$line" | read foo bar
不过这里更推荐here-string的写法,它不仅简洁,还避免了子shell的问题。
内容的提问来源于stack exchange,提问作者Justin Lin
相关产品推荐
相关产品推荐

