sh 将值拆分为变量

sh 将值拆分为变量

这适用于命令行,但不适用于脚本。

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

相关内容