私が驚いた点は次のとおりです。
$ if [ -n "$(findmnt | grep "\""proc"\"" | head -n 1)" ]; then echo 1; else echo 2; fi
2
"\""
この記事を読んだ後、IIRC以前に使用しましたhttps://unix.stackexchange.com/a/187452/446998、最終的に動作します。
$ echo "1"\""2"\""3"
1"2"3
最初のケースではなぜできませんか?
また訪れるシェルで引用符をエスケープする方法は?そして、許可された答えに従おうとすると、反対の問題が発生しました。存在しないインストールを見つけることです。
$ if [ -n $'$(findmnt | grep "\proc111"\ | head -n 1)' ]; then echo 1; else echo 2; fi
1
内部的にはgrep引用符なしで動作します。
~$ if [ -n "$(findmnt | grep proc111 | head -n 1)" ]; then echo 1; else echo 2; fi
2
~$ if [ -n "$(findmnt | grep proc | head -n 1)" ]; then echo 1; else echo 2; fi
1
提案を読んでみました。コマンドの置き換えで二重引用符をエスケープするしかし、私のコードにすぐに適用することはできません。
ベストアンサー1
問題は、二重引用符が誤ってエスケープされているのではなく、出力が一致しない"proc"
(二重引用符で囲まれている)ようですfindmnt
。
デフォルトの出力はforとfor and(少なくとも私が見たすべてのバージョンでは)のみfindmnt
表示されます。/proc
TARGET
proc
SOURCE
FSTYPE
findmnt
findmnt -J
出力するので、"proc"
式に一致するが、再びjq
。