저스틴은 퀀 타의 답변에 대한 첫 번째 논평에서 자신의 질문을 명확히했습니다. 그는 사용하여 텍스트의 줄을 읽고 read
(또는 다른 동적 수단에 의한) 및 물결표를 확장하고자합니다.
문제는 "변수 내용에 물결표 확장을 어떻게 수행합니까?"가됩니다.
일반적인 접근 방식은을 사용하는 eval
것이지만 >
변수에 공백과 출력 리디렉션 ( ) 과 같은 몇 가지주의 사항 이 있습니다. 다음은 저에게 효과적입니다.
read -p "Provide the destination directory: " DESTINATION
if [ ! -d "`eval echo ${DESTINATION//>}`" ]; then
echo "'$DESTINATION' does not exist." >&2;
exit 1;
fi
다음 각 입력으로 시도하십시오.
~
~/existing_dir
~/existing dir with spaces
~/nonexistant_dir
~/nonexistant dir with spaces
~/string containing > redirection
~/string containing > redirection > again and >> again
설명
- 은
${mypath//>}
떼어 내고 >
동안 파일을 소지품 수있는 자 eval
.
- 는
eval echo ...
실제 틸드 확장을하는 일이다
- 주위의 큰 따옴표
eval
는 공백이있는 파일 이름을 지원하기위한 것입니다.
이에 대한 보충으로 다음과 같은 -e
옵션을 추가하여 UX를 향상시킬 수 있습니다 .
read -p "Provide the destination directory: " -e DESTINATION
이제 사용자가 물결표와 적중 탭을 입력하면 확장됩니다. 그러나 사용자가 탭을 눌렀을 때만 확장이 이루어 지므로이 방법은 위의 평가 방법을 대체 하지 않습니다 . 그가 ~ / foo를 입력하고 엔터를 치면 물결표로 남아 있습니다.
또한보십시오:
cd "~/Desktop"
할 때와 마찬가지로 오류가 발생합니다. 따옴표없이 따옴표없이 인용하거나 변수로 저장해야합니다. 예를 들어,a=~/Desktop; cd $a;
작동하지만 serverfault.com/questions/417252/…를a="~/Desktop"; cd Desktop;
참조하십시오.