bashスクリプトからegrepに変数引数を渡す

bashスクリプトからegrepに変数引数を渡す

ファイルにスクリプトパラメータを書き込もうとするスクリプトmyScriptがあります。どういうわけか、egrepコマンドで変数拡張が正しく機能しません。私の例では、問題を次のように分離したと思います。 egrepコマンドは、スクリプトにパラメータを明示的に書き込むと機能しますが、パラメータをスクリプトに渡すと、egrepコマンドは私が送信したパラメータが好きではありません。

#!/bin/bash
echo "\def\\$1" > myFile
echo "\def\\$1$1" >> myFile

myVar=\\$1
echo myVar is "$myVar"

grepWorks=$(egrep '\\def\\dog\>' myFile)
echo Without a variable, grep output is $grepWorks

echo Pattern string fed to grep with variable myVar is  "\\def$myVar"
grepFails=$(egrep "\\def$myVar\>" myFile)
echo With a variable, grep output is $grepFails

このスクリプトを実行すると、

myScript dog

出力は次のとおりです

myVar is \dog
Without a variable, grep output is \def\dog
Pattern string fed to grep with variable myVar is \def\dog
With a variable, grep output is

どんな助けでも大変感謝します。

ベストアンサー1

次の行を変更します。

grepFails=$(egrep "\\def$myVar\>" myFile)

そして:

grepFails=$(egrep "\\\\def\\$myVar\>" myFile)

問題は、\サブシェルで正しくエスケープされないことです。

理解するには、を実行してみてくださいeval echo "\\\\"。出力が\二重評価によるものであることがわかります。

おすすめ記事