변수를 읽고 사용자 입력에서 백슬래시를 유지하려면 "읽기"를 사용하십시오.

변수를 읽고 사용자 입력에서 백슬래시를 유지하려면 "읽기"를 사용하십시오.

나는 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"

$IFS1 입력 줄에서 선행 및 후행 공백(공백 및 탭)이 제거되는 것을 방지하려면 기본값을 사용하십시오.

² 마찬가지로 백슬래시는 환경이나 구축 방법 echo에 따라 특별하게 처리될 수 있습니다 .bash

관련 정보