IFS=","를 사용하여 쉘에서 쉼표로 구분된 값을 출력하는 방법

IFS=","를 사용하여 쉘에서 쉼표로 구분된 값을 출력하는 방법

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에 대해서만 변수를 설정할 수 있습니다.readread

IFS=, read ...

이렇게 하면 IFS나머지 스크립트에 대해 기본값이 아닌 값을 설정하는 것을 방지할 수 있습니다.

또한 관련될 수 있습니다:

또한 줄의 - 문자 합계는 #파일의 첫 번째 문자여야 하며, 같은 줄에 다른 문이 없는 한 각 문은 a로 끝날 필요가 없습니다.!#!;

관련 정보