我正在尝试从脚本运行相同的 awk 命令,但我得到一个额外的 false 我不确定它是否来自但是当我从终端运行命令时它不返回 false ?
获取状态.sh
#/bin/bash
# sed -n '/\\State/{getline; print}' /var/opt/BESClient/besclient.config
export SERVER_STATE=`awk '/\\State/{getline; print $3}' /var/opt/BESClient/besclient.config`
echo $SERVER_STATE
echo $SERVER_STATE
exit 0
输出
./get_state.sh
false Live
false Live
但是
sh-4.1$ awk '/\\State/{getline; print $3}' /var/opt/BESClient/besclient.config
输出
Live
最佳答案
反斜杠需要在反引号中转义,有些shell也要求在其中转义$
。要么这样做:
# vv-- here --------------v
export SERVER_STATE=`awk '/\\\\State/{getline; print \$3}' /var/opt/BESClient/besclient.config`
或者使用 $()
代替:
export SERVER_STATE=$(awk '/\\State/{getline; print $3}' /var/opt/BESClient/besclient.config)
false
来自包含 State
(但不包含 \State
)的行之后的第三个字段,并且它们出现在一行而不是两行是因为 $SERVER_STATE
未被引用
echo $SERVER_STATE
关于linux - 当直接从终端运行时,Bash 脚本不会为命令打印相同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29259157/