シェル変数を二重引用符で囲むと混乱します。
具体的には、次のsed代替コマンドを使用します。
sed -i.tmp "/$MY_VAR/d" /foo/bar/file.txt
しかし、私は引用しません$MY_VAR
。そうですか?そうでない場合は、どのように引用できますか?
以下は明らかに機能しません
sed -i.tmp '/"$MY_VAR"/d' /foo/bar/file.txt
答え1
最初のコマンドでははい参照変数。
2番目のコマンドライン引数として渡される文字列にはsed
二重引用符があり、変数はこの引用符内にあり、シェルによって拡張されます。
指摘したように、2番目のコマンドはシェルが一重引用符で囲まれた変数の値を拡張しないため(予想どおり)機能しません。
$MY_VAR
最初のコマンドは正確ですが、スラッシュを含めると問題が発生します。そのsed
場合は、次に表示されないパターンの区切り文字を選択してください$MY_VAR
。
sed "\@$MY_VAR@d"
変数はリーダー引用符の中に現れるとき。変数を「厳密に引用」する必要はありません。リーダー。つまり"hello $world!"
、文字列内では$world
で表示されなくても変数を参照します"$world"
。
重要なのは、文字列全体が引用されることです。二重引用符を使用すると、シェルはその中のすべての変数を拡張します。
上記の例では、文字列が参照"\@$MY_VAR@d"
され、その中に変数が$MY_VAR
あるため、参照もされます(引用符付き文字列内にあるため)。