为什么这些做不同的事情?
ENTRY="banana#Apple"
HOST_ID=$ENTRY | awk -F '#' '{print $2}'
echo $HOST_ID
echo $ENTRY | awk -F '#' '{print $2}'
在echo命令中,数据按预期显示。在save to variable命令中,数据不是,变量是空的。
答案 0 :(得分:2)
此:
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_ID='banana#Apple'
不产生任何输出,因此awk
命令没有输入,因此它不会打印任何内容。 (并且由于子shell,即使HOST_ID='banana#Apple'
部分也没有效果:它在子shell中设置该变量,而不是在运行整个命令的父shell中设置。所以值几乎立即消失了)
相反,你想写:
HOST_ID="$(echo "$ENTRY" | awk -F '#' '{print $2}')
或:
HOST_ID="$(awk -F '#' '{print $2}' <<< "$ENTRY")
或者(如果您只是期望$ENTRY
有两个字段):
HOST_ID="${ENTRY#*#}"