sedコマンドを実行するシェルスクリプトがあります。変数が拡張されると、ファイル名を参照します。
sed -i "$3d" $filename
~になる
sed -i 1d '~/file'
デバッグフラグに示されているとおりです-x
。
実行すると、次のものが生成されます。
sed: can't read ~/file: No such file or directory
コマンドを手動で実行しようとすると、引用符を削除しない限り、同じことが起こります。
sed -i 1d ~/file
引用符なしで実行すると、目的の出力が生成されます。
答え1
問題はファイル名の周りの引用符です。これにより、シェルが~
ホームフォルダに展開されるのを防ぎます。だからsed
というフォルダを探してください~
。
$filename
引用符を含まないか、代わりに実際のパスを使用してください~
。
答え2
ここで問題は表示されない部分です。その行の前のどこかに次の内容があります。
filename="~/file"
したがって、問題は、後で使用することが$filename
引用されるのではなく、引用されないことです。名前にスペースが含まれていると、他の問題が発生する可能性があります。
~
単語の最初の文字の場合、シェルはそれをホームディレクトリに展開します。変数拡張の結果であれば拡張されません。
$HOME
代わりに使用できます~
。
filename=$HOME/file
sed -i "$3d" $filename
または、引用符を使用する方が良いです。
filename="$HOME/file"
sed -i "$3d" "$filename"