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"