![sh 将值拆分为变量](https://linux22.com/image/226494/sh%20%E5%B0%86%E5%80%BC%E6%8B%86%E5%88%86%E4%B8%BA%E5%8F%98%E9%87%8F.png)
这适用于命令行,但不适用于脚本。
read -r local_temperature system_mode preset running_state current_heating_setpoi
nt <<< $(thermostat)
语法错误:意外重定向
可以在脚本中完成吗?使用cut
五次似乎有点糟糕,但这是我唯一能想到的。
答案1
对于 dash(在 Ubuntu 上),您可以使用传统的heredoc(<<
)而不是herestring:
read -r local_temperature system_mode ... <<END # END must be unquoted
$(thermostat)
END
但对于 busybox,我收到了一个虚假的“未找到”错误,其中似乎是变量垃圾。
如果 (1) 命令的输出不包含 glob 字符,或者您已使用 或类似命令关闭 glob set -f
,并且 (2) 您运行的脚本中没有传递任何后续命令所需的参数,则您可以 (ab )使用位置参数:
set -- $(thermostat); local_temperature=$1; system_mode=$2; ...
这不会像“n-1 之后的所有单词都组合在最后一个 = nth var 中”一样,read
但您可以使用例如来近似
a=$1; b=$2; c=$3; shift 3; d=$*
# d gets all words after the first 3 but not the original delimiters e.g. multiple spaces