나는 read
다음과 같이 사용자로부터 경로를 읽는 데 사용합니다.
read -p "Input the file name: " FilePath
이제 사용자는 다음 문자열을 입력합니다.
\Supernova\projects\ui\nebula
\
내가 원하는 결과는 다음 과 같습니다 /
.
/Supernova/projects/ui/nebula
그런데 명령은 다음과 같습니다.
echo $FilePath
출력 결과:
Supernovaprojectsuinebula
나는 무엇이 잘못되었는지 모른다.
답변1
문제는 read
입력의 백슬래시를 이스케이프 연산자(사용할 때 read word1 word2
줄이 계속되도록 구분 기호와 개행 문자를 이스케이프하는 연산자)로 처리한다는 것입니다.
원하는 작업을 수행하려면 백슬래시 처리를 수행하지 않도록 지시 -r
하는 스위치를 추가해야 하며, 전체 줄을 변수에 할당할 전체 단어로 처리하도록 빈 문자열로 read
설정해야 합니다 .$IFS
IFS= read -rp "Input file name: " FilePath
UnixPath="${FilePath//\\//}"
또한 귀하의 echo
명령은변수 대체에는 큰따옴표가 필요합니다.: echo "$FilePath"
, 어쨌든 일반적으로echo
임의의 데이터를 출력하는 데 사용할 수 없습니다.² 따라서:
printf '%s\n' "$FilePath"
$IFS
1 입력 줄에서 선행 및 후행 공백(공백 및 탭)이 제거되는 것을 방지하려면 기본값을 사용하십시오.
² 마찬가지로 백슬래시는 환경이나 구축 방법 echo
에 따라 특별하게 처리될 수 있습니다 .bash