이 주제에서는 bash 쉘 스크립팅에서 문자열을 분할하는 방법을 정의했습니다.
어떤 경우에는 특정 작업을 수행하기 위해 문자열 데이터를 분할해야 할 수도 있습니다. 대부분의 프로그래밍 언어에는 문자열 데이터를 여러 부분으로 나누는 '분할' 기능이 내장되어 있습니다. 그러나 bash에는 이러한 유형의 내장 기능이 포함되어 있지 않습니다. 그러나 bash 스크립팅에서는 구분 기호를 사용하여 문자열 데이터를 분할할 수 있습니다. 구분 기호는 단일 문자이거나 여러 문자로 구성된 문자열일 수 있습니다.
Bash 쉘에서 문자열을 분할하는 방법을 이해하려면 아래 방법을 확인하십시오.
$IFS 변수를 사용하여 분할
다음은 $IFS를 사용하여 bash에서 문자열을 분할하는 단계입니다.
- $IFS는 문자열을 단어로 분할하는 데 사용되는 특수 내부 변수입니다. $IFS 변수는 ' 내부 필드 구분 기호 Bash가 경계를 인식하는 방법을 결정합니다. $IFS는 특정 구분 기호 [ IFS='' ] 문자열을 나누는 데 사용됩니다. 공백은 $IFS의 기본값입니다. 그러나 ' ', ' ', '-' 등과 같은 값을 구분 기호로 사용할 수도 있습니다.
- 구분 기호를 할당한 후 '-r' 및 '-a'라는 두 가지 옵션으로 문자열을 읽을 수 있습니다. 즉., 읽기 -ra ARR <<< '$str' .
여기서 '-r' 옵션은 백슬래시()가 이스케이프 문자가 아닌 문자임을 정의하는 데 사용됩니다. '-a' 옵션은 단어($IFS로 구분)가 0부터 시작하는 배열의 순차 인덱스에 할당되도록 정의하는 데 사용됩니다. - 그런 다음 bash 'for' 루프를 적용하여 배열로 분할된 토큰에 액세스합니다.
몇 가지 예를 통해 이 메커니즘을 이해해 보겠습니다.
예 1: Bash는 공백으로 문자열을 분할합니다.
이 예에서는 공백 문자 구분 기호를 사용하여 문자열을 분할합니다.
배시 스크립트
#!/bin/bash #Example for bash split string by space read -p 'Enter any string separated by space: ' str #reading string value IFS='' #setting space as delimiter read -ra ADDR <<<'$str' #reading str as an array tokens separated by ifs for i in '${addr[@]}'; #accessing each element of do echo '$i' done < pre> <p> <strong>Output</strong> </p> <p>If we input a string 'We welcome you on Javatpoint', the output will look like this:</p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string.webp" alt="Bash Split String"> <h3>Example 2: Bash Split String by Symbol</h3> <p>In some cases, we may have a requirement to split a string by other delimiters such as a symbol or specific character. In this example, a string is split using a comma (,) symbol character as a delimiter.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string by Symbol (comma) read -p 'Enter Name, State and Age separated by a comma: ' entry #reading string value IFS=',' #setting comma as delimiter read -a strarr <<<'$entry' #reading str as an array tokens separated by ifs echo 'name : ${strarr[0]} ' 'state ${strarr[1]} 'age ${strarr[2]}' < pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-2.webp" alt="Bash Split String"> <h2>Split without $IFS variable</h2> <p>In bash, a string can also be divided without using $IFS variable. The 'readarray' command with -d option is used to split the string data. The -d option is applied to define the separator character in the command like $IFS. Moreover, the bash loop is used to print the string in split form.</p> <p>Let's understand this logic with the help of some example:</p> <h3>Example 1: Bash Split String by Symbol</h3> <p>This example defines how a string value can be split without using $IFS. As per the script, a text value should be entered with the colon (:) sign so that it can be split. Check out the bash script below:</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string without $IFS read -p 'Enter any string separated by colon(:) ' str #reading string value readarray -d : -t strarr <<<'$str' #split a string based on the delimiter ':' printf ' ' #print each value of array with help loop for (( n="0;" < ${#strarr[*]}; n++ )) do echo '${strarr[n]}' done pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-3.webp" alt="Bash Split String"> <h3>Example 2: Bash Split String by another string</h3> <p>In this example, we have used idiomatic expressions where parameter expansion has completed.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example for bash split string by another string str='WeLearnWelcomeLearnYouLearnOnLearnJavatpoint' delimiter=Learn s=$str$delimiter array=(); while [[ $s ]]; do array+=( '${s%%'$delimiter'*}' ); s=${s#*'$delimiter'}; done; declare -p array </pre> <p>In this bash script, we have used the following Parameter- Expansions:</p> <ul> <tr><td>${parameter%%word}</td> <br> It removes the longest matching suffix pattern. </tr><tr><td>${parameter#word}</td> <br> It removes the shortest matching prefix pattern. </tr></ul> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-4.webp" alt="Bash Split String"> <h3>Example 3: Bash Split String using Trim Command</h3> <p>In this example, we have used trim (tr) command to split a string. Instead of using the read command, the trim command is used to split a string on the delimiter.</p> <p> <strong>Bash Script</strong> </p> <pre> #!/bin/bash #Example to split a string using trim (tr) command my_str='We;welcome;you;on;javatpoint.' my_arr=($(echo $my_str | tr ';'' ')) for i in '${my_arr[@]}' do echo $i done </pre> <p> <strong>Output</strong> </p> <img src="//techcodeview.com/img/bash-tutorial/11/bash-split-string-5.webp" alt="Bash Split String"> <h4>Note: It should be noted that array elements are divided on 'space delimiter' if we apply a trim command to split a string. For example, elements like 'Windows OS' will be treated as two different words.</h4> <h2>Conclusion</h2> <p>In this topic, we demonstrated how to split a string in bash scripting with different types of scenarios with or without using delimiter.</p> <hr></'$str'></pre></'$entry'></pre></'$str'>
이 bash 스크립트에서는 다음 매개변수 확장을 사용했습니다.
일치하는 가장 긴 접미사 패턴을 제거합니다.
가장 짧게 일치하는 접두사 패턴을 제거합니다.
산출
예 3: Trim 명령을 사용한 Bash 분할 문자열
이 예에서는 문자열을 분할하기 위해 Trim(tr) 명령을 사용했습니다. 읽기 명령을 사용하는 대신, 구분 기호에서 문자열을 분할하는 데 트림 명령이 사용됩니다.
배시 스크립트
#!/bin/bash #Example to split a string using trim (tr) command my_str='We;welcome;you;on;javatpoint.' my_arr=($(echo $my_str | tr ';'' ')) for i in '${my_arr[@]}' do echo $i done
산출
참고: 문자열을 분할하기 위해 트림 명령을 적용하는 경우 배열 요소가 '공백 구분 기호'로 분할된다는 점에 유의해야 합니다. 예를 들어 'Windows OS'와 같은 요소는 두 개의 다른 단어로 처리됩니다.
결론
이 주제에서는 구분 기호를 사용하거나 사용하지 않고 다양한 유형의 시나리오를 사용하여 bash 스크립팅에서 문자열을 분할하는 방법을 시연했습니다.
\'$str\'>\'$entry\'>'$str'>