다음 CSV 파일을 고려하십시오.
jdbc.driverClassName,oracle.jdbc.driver.OracleDriver
jdbc.username,kshitiz
다음과 같이 변환되어야 합니다.
-Djdbc.driverClassName=oracle.jdbc.driver.OracleDriver \
-Djdbc.username=kshitiz \
다음 bash 스니펫이 제공됩니다.
while read l; do
IFS=',' read -ra arr <<< "$l"
echo '-D'${arr[0]}'='${arr[1]}' \'
done <properties.txt
인쇄 누르기:
\jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
\jdbc.username=kshitiz
여기서 무슨 일이 일어나고 있는 걸까요?
답변1
\jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
스크립트가 실제로 출력하는 것은 다음과 같습니다.
-Djdbc.driverClassName=oracle.jdbc.driver.OracleDriver
- 입력하다
\
(공백에 주의하세요)- 개행 문자
스크립트가 캐리지 리턴을 인쇄하는 이유는 무엇입니까? 입력 파일에는 Unix 규칙 개행 문자가 없지만 CRLF와 각 줄 끝의 캐리지 리턴이 이미 두 번째 배열 변수의 일부로 간주되기 때문입니다.
변수에 캐리지 리턴과 같은 공백이 추가되는 이유는 무엇입니까 read
? 당신이 변했기 때문입니다 IFS
.
현명한 사람들에게 전하는 몇 마디:
- —
printf
대신 사용echo
특히echo
, 여기처럼 명령줄 옵션처럼 보이는 것과 백슬래시가 있는 것을 전달하는 경우입니다 . hexdump -C
출력을cat -v
또는 에 전달하여 이러한 문제를 진단합니다od -t c -t x1
.- 그렇지 않은 경우 , 또는 를 사용하여 동일한 작업을
dos2unix
쉽게 수행할 수 있습니다 .tr
sed
perl