スクリプトから同じawkコマンドを実行しようとしていますが、余分なfalseが表示されます。それがどこから来たのかわかりませんが、ターミナルからコマンドを実行してもfalseは返されませんか?
get_state.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
バックスラッシュはバックティックでエスケープする必要があり、一部のシェルもバックティックでエスケープする必要があり$
ます。どちらかを行います:
# 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
含まれている行の後の行の3番目のフィールドから来ているState
(ではない\State
)、そして、彼らは代わりに2の単一ラインに表示されていることをされているため、$SERVER_STATE
引用符で囲まれていない中であります
echo $SERVER_STATE
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加