首記の件、どうしても分からなかったので質問させてください。
環境
OS:CentOS-Stream
bashバージョン:4.4.19(1)-release (x86_64-redhat-linux-gnu)
質問内容
リモートホスト(host)に対して、以下のように特定のファイルが存在するかをSSHで確認するコマンドを作成しました。
ファイルが存在すれば0、存在しなければ1を返す単純なものです。
[root@localhost test]# ssh host "ls -l | grep -q file; echo $?" 0
この返却値を変数に格納したいと考え、以下のようにしたところ、
ファイルの存在有無にかかわらず、返却値が0となってしまいます。
[root@localhost test]# RET=`ssh host "ls -l | grep -q file; echo $?"` [root@localhost test]# echo $RET 0 [root@localhost test]# [root@localhost test]# RET=`ssh host "ls -l | grep -q file2; echo $?"` [root@localhost test]# echo $RET 0
試しに、echoで出力させる戻り値のエスケープを増やしてみたところ、正しく動作しました。
[root@localhost test]# RET=`ssh host "ls -l | grep -q file; echo \$?"` [root@localhost test]# echo $RET 0 [root@localhost test]# RET=`ssh host "ls -l | grep -q file2; echo \$?"` [root@localhost test]# echo $RET 1
ここからが質問なのですが、上記でエスケープを増やした場合に正しく動作したのは何故でしょうか?
バッククォートをつけた場合は、一度エスケープを処理する動きをするのでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/25 14:22