次の内容(または同様の内容)を含むファイルがあります。
# cat /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
次のように一致させてアイテムが存在するかどうかを確認します。
# grep --fixed-string "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/" /var/www/htpasswd
#
しかし、何も一致しません。理由および/または方法に関するアイデアはありますか?
最初はドル記号だと思いましたが、次のように動作します。
# grep --fixed-string "foo:$ap" /var/www/htpasswd
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
#
答え1
一重引用符( ')を使用すると、$ nnnは変数として扱われません。 「付きの文字列は挿入された文字列であり、」の文字列は挿入されません。
文字列の前にechoを追加するときに出力を見てください。
$ echo "foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/"
foo:3wJ8tiQ/
$ echo 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/'
foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/
答え2
次のように単一引用符を使用してください。
grep 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /vaw/www/htpasswd
答え3
grep が到着する前にシェルが結果を解釈する問題を回避するには、引数 --fixed-strings に二重引用符の代わりに一重引用符を使用する必要があります。 https://stackoverflow.com/questions/6697753/difference- Between-single-and-double-quotes-in-bash
grep --fixed-string 'foo:$apr1$73wJ8tiQ$HdaRYe2pUMqBf0ZpMJz6h/' /var/www/htpasswd