参照されている場合、Sedはファイルを見つけることができません。

参照されている場合、Sedはファイルを見つけることができません。

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"

関連情報