走ろうとしている
sed -i "/$variable/c \$variable1' file.txt
ただし、ファイルの変更は表示されません:file.txt
。
しかし、変数なしの同じコマンドは正常に機能します。
sed -i "/variable/c \variable1' file.txt
このようにしてください:
sed -i "/$variable/c \\${variable}1" file.txt
変更:
\
の前に$
がある場合、シェルはリテラル$
を文字列に挿入します。代わりに、追加の\
を追加して最初のエスケープをエスケープし、リテラル\
が出力されるようにします。
変数の直後に文字または数字がある場合は、名前を{...}
で囲みます。これにより、変数は存在しないvariable1
と区別されます(変数が存在しない場合、シェルは変数を何にも展開しません)短い名前を探すよりも)。
引用符と一貫性を保ち、"
で始めたので、'
で終わってはいけません!とにかく、変数は二重引用符内でのみ展開されます。
このようなデバッグにはecho
を使用できます。出力を見ると、以下のコマンドで問題が発生していることがわかります。
echo sed -i "/$variable/c \$variable1" file.txt
と比較してください。
echo sed -i "/$variable/c \\${variable}1" file.txt