bash 변수에 공백이있는 디렉토리 이름 저장 할 때

(참고 : 더 많은 연구를 한 후에 부분 답변이 있지만 포함 된 공간에 따라 변수에 대해 실제 명령을 다르게 작성하는 것을 좋아하지 않습니다. 더 나은 제안을 받아 들일 것입니다) .

나는 무언가를 작업하면서 다양한 작업 변수를 bash에 저장하는 것을 좋아합니다. 이렇게하면 매번 입력하지 않아도되며 나중에 다시 작업 할 때 도움이됩니다 ( localprofile.sh 파일에 할당 한 source후 나중에 …).

공백이있는 디렉토리 이름을 저장하고 싶습니다. 따옴표 또는 \ 기반 이스케이프를 사용하여 대화 형으로 파일 / 디렉토리 이름의 공백을 처리하는 방법을 알고 있습니다.

$ ls -1 /Users/myuser/Library/Application\ Support/ | tail -5
iTerm2
icdd
org.videolan.vlc
pip
videosubscriptionsd

또는

$ ls -1 "/Users/myuser/Library/Application Support/" | tail -5
iTerm2
icdd
org.videolan.vlc
pip
videosubscriptionsd

이제 해당 디렉토리를 bash $ dn 변수 에 할당하고 싶지만 제대로 작동하지 않습니다.

여러 가지 시도가 있습니다. 의도적으로 ~ 기반 쉘 확장을 피했습니다.

dn='/Users/myuser/Library/Application Support/'
echo ''
echo ''
echo $dn
ls -1 $dn

dn='"/Users/myuser/Library/Application Support/"'
echo ''
echo ''
echo $dn
ls -1 $dn

dn=/Users/myuser/Library/Application\ Support/
echo ''
echo ''
echo $dn
ls -1 $dn

dn="/Users/myuser/Library/Application\ Support/"
echo ''
echo ''
echo $dn
ls -1 $dn

이들 각각은 변형을 보여줍니다 ls: /Users/myuser/Library/Application\: No such file or directory



답변

OK, mac 또는 osx를 지정하지 않고 인터넷 검색으로 확장하여 이것을 발견했습니다. 이것은 일반적인 bash 문제 입니다 .Bash 변수에 공백이있는 경로를 추가하는 방법

그리고 명령을 실행할 때 bash 변수를 큰 따옴표로 묶는 한 “인터랙티브 접근 방식”, 즉 따옴표 또는 \ 이스케이프 작업 모두를 내 질문에 번역합니다.

dn='/Users/myuser/Library/Application Support/'
ls -1 "$dn" | tail -5

dn=/Users/myuser/Library/Application\ Support/
ls -1 "$dn" | tail -5

위의 작은 따옴표를 사용하지 마십시오ls: $dn: No such file or directory . 이 경우에는 bash 대체가 발생하지 않습니다 .

여기서 단점은 변수를 큰 따옴표로 묶어야하거나 포함 된 공간에 의존하지 않아야한다는 것입니다.

dn="'/Users/myuser/Library/Application Support/'" 따옴표가 없으면 작동하지 않습니다, btw.


답변