Проблема здесь в той части, которую вы не показываете. Где-то перед этой строкой у вас есть что-то вроде этого:
filename="~/file"
Таким образом, проблема не в том, что более позднее использование $filename
заключено в кавычки, оно не заключено в кавычки, и это может привести к другим проблемам, если имя содержит пробелы.
Оболочка расширяет ~
до домашнего каталога, если это первый символ слова. Он не расширяется, если является результатом раскрытия переменной.
Вы можете использовать $HOME
вместо~
:
filename=$HOME/file
sed -i "$3d" $filename
или лучше с кавычками:
filename="$HOME/file"
sed -i "$3d" "$filename"
Проблема заключается в кавычках вокруг имени файла. Они не позволяют вашей оболочке расширить ~
до вашей домашней папки. Итак, sed
ищет папку с именем ~
.
Убедитесь, что $filename
не содержит кавычек, или используйте реальный путь вместо ~
.