
ファイルにスクリプトパラメータを書き込もうとするスクリプト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 "\\\\"
。出力が\
二重評価によるものであることがわかります。