IFS를 사용할 때 쉼표로 구분된 출력을 제공하지 않는 작은 스크립트가 있지만 다른 많은 값을 읽으려면 IFS가 필요하므로 필수입니다. 다음 스크립트의 출력은 다음과 같지만 odi_server1 odi_server2
쉼표로 구분해야 합니다.
#Script Starts
#!/bin/sh
IFS=","
odi_cluster=odi_server1,odi_server2;
echo $odi_cluster;
#Script Ends
전류 출력 =odi_server1 odi_server2
예상 출력 =odi_server1,odi_server2
참고: - IFS=","
필수 항목이므로 삭제할 수 없습니다.
답변1
$odi_cluster
호출 시 따옴표를 사용하지 않으므로 셸 echo
은 변수 값을 에도 나타나는 문자로 분할합니다 $IFS
(그런 다음 결과 단어에 대해 파일 이름 글로빙을 수행합니다). 일반적으로 $IFS
공백, 탭 및 줄 바꿈이 포함되어 있지만 쉼표로 재설정했습니다.
변수 값 odi_server1,odi_server2
및 $IFS
쉼표가 포함된 경우 이 분할을 통해 두 단어 odi_server1
및 가 생성됩니다 odi_server2
. 이는 echo
두 개의 별도 인수로 제공되며 echo
유틸리티는 이를 구분된 공백으로 출력합니다.
출력에 영향을 주지 않으려면 IFS
쉘이 인용 확장을 통해 변수 값을 분할하지 못하도록 하십시오.
echo "$odi_cluster"
또는
printf '%s\n' "$odi_cluster"
관련된:
다음을 호출하여 내장 유틸리티 IFS
에 대해서만 변수를 설정할 수 있습니다.read
read
IFS=, read ...
이렇게 하면 IFS
나머지 스크립트에 대해 기본값이 아닌 값을 설정하는 것을 방지할 수 있습니다.
또한 관련될 수 있습니다:
또한 줄의 - 문자 합계는 #
파일의 첫 번째 문자여야 하며, 같은 줄에 다른 문이 없는 한 각 문은 a로 끝날 필요가 없습니다.!
#!
;