Bash를 사용하여 공백과 이스케이프 문자가 포함된 폴더를 입력하세요.

Bash를 사용하여 공백과 이스케이프 문자가 포함된 폴더를 입력하세요.

다음 형식으로 폴더 목록에 액세스할 수 있습니다. lastname, firstname(id) 터미널에서 폴더를 입력하려고 하면 cd test/lastname,\ firstname\(id\) 공백이 없는 데 백슬래시가 있는 이유를 알 수 없는 것 같습니다. 내 스크립트는 자격 증명에 액세스할 수 있으며 백슬래시를 사용하여 정확한 형식이 생성되지만 여전히 bash 스크립트에서 폴더에 들어갈 수 없습니다. 제가 사용하는 변수는 다음과 같습니다. folder="lastname,\ firstname\(id\)"

이렇게 하면 cd $HOME/test/$folder/ 해당 폴더가 없다고 나옵니다. 다양한 문제에 대해 제안된 여러 가지 솔루션을 시도했지만 작동하지 않았습니다. 폴더 변수의 큰따옴표 안에 넣으면 전체 표현식이 작동하지 않습니다. 나는 무엇이 잘못되었는지 모르기 때문에 제대로 작동하지 못하는 것 같아요. 누군가가 여기서 나를 도울 수 있다면 좋을 것입니다!

답변1

이것:

제가 사용하는 변수는 다음과 같습니다.folder="lastname,\ firstname\(id\)"

~ 할 것이다아니요일하다. 왜냐면 변수는유지하다백슬래시:

[maulinglawns@ArchLinux ~]$ folder="lastname,\ firstname\(id\)"
[maulinglawns@ArchLinux ~]$ echo "$folder"
lastname,\ firstname\(id\)

따라서 다음과 같은 메시지가 나타납니다.

cd "slask/$folder" 
bash: cd: slask/lastname,\ firstname\(id\): No such file or directory

이 문제를 해결하는 가장 쉬운 방법은 ""다음과 같이 변수를 에 넣는 것입니다.

[maulinglawns@ArchLinux slask]$ mkdir lastname,\ firstname\(id\)
[maulinglawns@ArchLinux slask]$ folder="lastname, firstname(id)"
[maulinglawns@ArchLinux slask]$ cd "$folder"
[maulinglawns@ArchLinux lastname, firstname(id)]$ 

이렇게 하면 쉘이 변수의 공백으로 분할되지 않습니다. 변수 및 참조에 대해 자세히 알아보세요.여기.

답변2

확장명 인용( $folder예 확장자, "매개변수 확장자"):

$ cd "$HOME/test/$folder/"

값을 작은따옴표로 묶은 경우:

$ folder='lastname, firstname(id)'

위의 코드는 백틱 없이도 cd잘 작동합니다 .

관련 정보