Shell脚本:Echo vs save to variable
为什么它们做不同的事情Shell脚本:Echo vs save to variable,shell,Shell,为什么它们做不同的事情 ENTRY="banana#Apple" HOST_ID=$ENTRY | awk -F '#' '{print $2}' echo $HOST_ID echo $ENTRY | awk -F '#' '{print $2}' 在echo命令中,数据按预期显示。在save to variable(保存到变量)命令中,数据为空,变量为空。这是: HOST_ID=$ENTRY | awk -F '#' '{print $2}' 这意味着: HOST_ID='banan
ENTRY="banana#Apple"
HOST_ID=$ENTRY | awk -F '#' '{print $2}'
echo $HOST_ID
echo $ENTRY | awk -F '#' '{print $2}'
在echo命令中,数据按预期显示。在save to variable(保存到变量)命令中,数据为空,变量为空。这是:
HOST_ID=$ENTRY | awk -F '#' '{print $2}'
这意味着:
HOST_ID='banana#Apple' | awk -F '#' '{print $2}'
换句话说,您在单独的子shell中运行两个命令-HOST_ID='banana#Apple'
,和awk-F'''{print$2}'
,并将一个命令的输出传输到另一个命令。这并不能完成任何事情:HOST\u ID='banana#Apple'
不产生任何输出,因此awk
命令不获取任何输入,因此它不打印任何内容。(由于子shell,即使是HOST_ID='banana#Apple'
部分也没有效果:它在子shell中设置该变量,而不是在运行全局命令的父shell中。因此该值几乎立即消失)
相反,您要写:
HOST_ID="$(echo "$ENTRY" | awk -F '#' '{print $2}')
或:
您需要告诉shell您的
HOST\u ID=…
版本打算执行一个命令。仅仅在上面放一些看起来像命令的文本是不够的var=$(这里的command)
或var=`command here`
顺便说一句,如果您提到您正在使用的shell,那么它会很有帮助,尽管这里的答案中的技术往往适用于bourne类型的shell:bash
,sh
,zsh
,dash
。
HOST_ID="$(awk -F '#' '{print $2}' <<< "$ENTRY")
HOST_ID="${ENTRY#*#}"