linux - 当直接从终端运行时,Bash 脚本不会为命令打印相同的输出

标签 linux bash shell awk

我正在尝试从脚本运行相同的 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/

相关文章:

linux - 期望嵌套的 shell 脚本

bash - 如何在 bash shell 中自动为程序输出着色?

linux - 如何在 Linux shell 脚本中更改文件扩展名?

c++ - 如何获取引用 FQDN 的 IP 列表

php - 如何给symfony写权限

带 if-else 语句的 Bash 脚本 for 循环

bash - 在 Bash 或 Shell 脚本中转发函数声明?

php - 从 php 运行 shell 命令,

macos - ~/.bash_profile 别名中 pwd 的不同评估取决于引用类型

Linux命令结构