![참조된 경우 Sed는 파일을 찾을 수 없습니다.](https://linux55.com/image/152944/%EC%B0%B8%EC%A1%B0%EB%90%9C%20%EA%B2%BD%EC%9A%B0%20Sed%EB%8A%94%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
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"