繁体   English   中英

Shell脚本:Echo与保存到变量

[英]Shell Scripting: Echo vs save to variable

为什么这些做不同的事情?

ENTRY="banana#Apple"

HOST_ID=$ENTRY | awk -F '#' '{print $2}'
echo $HOST_ID

echo $ENTRY | awk -F '#' '{print $2}'

在echo命令中,数据按预期显示。 在“保存到变量”命令中,数据不是,变量保留为空。

这个:

HOST_ID=$ENTRY | awk -F '#' '{print $2}'

意味着:

HOST_ID='banana#Apple' | awk -F '#' '{print $2}'

换句话说,您要在单独的子HOST_ID='banana#Apple'运行两个命令HOST_ID='banana#Apple'awk -F '#' '{print $2}' -并将其中一个输出传递给另一个。 这并没有完成任何事情: HOST_ID='banana#Apple'产生任何输出,因此awk命令没有获得任何输入,因此它不会输出任何内容。 (由于子外壳,即使HOST_ID='banana#Apple'部分也无效:它在子外壳中而不是在运行总体命令的父外壳中设置该变量。因此该值几乎立即消失了)


相反,您要编写:

HOST_ID="$(echo "$ENTRY" | awk -F '#' '{print $2}')

要么:

HOST_ID="$(awk -F '#' '{print $2}' <<< "$ENTRY")

或(如果您只希望$ENTRY有两个字段):

HOST_ID="${ENTRY#*#}"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM