Bashシェルで次のコマンドを実行しようとしています。
sed -i "s/\(update.*\)where /\1 where primary_id = '$primary_id', /" *.php
ご覧のとおり、私はsedを使用して変数を挿入しています'$primary_id'
。コマンドの実行後に表示されたが欠落している'
こと$primary_id
を確認しました。
たとえば、特殊文字を処理する方法は '
?
ベストアンサー1
これをもう少し簡単にしましょう。a
('$b'
dollar、ab)の各項目を一重引用符で置き換えようとします。c
、$b
変数に発生する拡張は望むものではありません。
b=c
sed -i "s/a/'$b'/g" *.php
上記のコマンドは、質問で実行したコマンドと似ています。文字列s/a/'$b'/g
が二重引用符で囲まれているため、変数が拡張されて文字列が'c'
。
コマンドsed
全体を二重引用符で囲んだ場合は、エスケープする必要があります$
。解決策は次のとおりです。
sed -i "s/a/'\$b'/g" *.php\
別の可能性は、シェルに特別な意味を持つ文字を除いて何も引用しないことです(推奨されませんが、潜在的に洞察力があります)。
sed -i s/a/\'\$b\'/g *.php