Šiame straipsnyje aptarsime, kaip padalyti eilutes bash scenarijuje.
Vienos eilutės padalijimas į kelias eilutes vadinamas stygų padalijimu. Daugelis programavimo kalbų turi įmontuotą funkciją, skirtą eilučių skaidymui, tačiau nėra įmontuotos bash funkcijos. Yra įvairių metodų, kaip atlikti suskaidytą eilutę bash. Pažiūrėkime visus metodus po vieną su pavyzdžiais.
1 būdas: IFS kintamojo naudojimas
$IFS (vidinis lauko skyriklis) yra specialus apvalkalo kintamasis. Jis naudojamas skyrikliui priskirti (vieno ar kelių simbolių seka, pagal kurią norime padalinti eilutę). Skirstytuvu gali būti bet kokia reikšmė arba simbolis, pvz., „ “, „ “, „-“ ir kt. Priskyrus reikšmę $IFS kintamajam, reikia nuskaityti eilutės reikšmę. Mes galime nuskaityti eilutę naudodami „-r“ ir „-a“ parinktis.
- „-r“: jis skaito pasvirąjį brūkšnį () kaip simbolį, o ne pabėgimo simbolį
- „-a“: jis naudojamas padalintiems žodžiams saugoti į masyvo kintamąjį, kuris deklaruojamas po parinkties -a.
1 pavyzdys: padalykite eilutę pagal tarpą
gimp kaip panaikinti pasirinkimą
Kodas:
#!/bin/bash # String text='Welcome to techcodeview.com' # Set space as the delimiter IFS=' ' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by using # the loop for val in '${newarr[@]}'; do echo '$val' done> Išvestis:
Welcome to techcodeview.com>
2 pavyzdys: padalykite eilutę pagal simbolį
Styga padalijama naudojant @ simbolį.
js masyvas
Kodas:
#!/bin/bash #String text='Welcome@[email protected]@!!' # Set @ as the delimiter IFS='@' # Read the split words into an array # based on space delimiter read -ra newarr <<< '$text' # Print each value of the array by # using the loop for val in '${newarr[@]}'; do echo '$val' done>
Išvestis:
Welcome to techcodeview.com !!>
2 būdas: nenaudojant IFS kintamojo
Taikant šį metodą, eilutės duomenims padalinti naudojama komanda readarray su parinktimi -d. „-d“: ši parinktis veikia kaip IFS kintamasis, skirtas apibrėžti skirtuką.
1 pavyzdys: padalykite eilutę pagal tarpą
Kodas:
#!/bin/bash # Read the main string text='Welcome to techcodeview.com' # Split the string by space readarray -d ' ' -t strarr <<< '$text' # Print each value of the array by # using loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done> Dabar pažiūrėkime, kaip veikia scenarijus:
mašinraščio rinkinys
- Scenarijus nustato reikšmę
text>Sveiki atvykę į techcodeview.com. - The
readarray>komanda padalija eilutę į masyvą naudodama tarpą kaip skirtuką, todėl susidaro masyvasstrarr>kuriame yra šie elementai: Sveiki atvykę į techcodeview.com. - Ciklas for kartojasi per kiekvieną elementą
strarr>masyvas. - Jis spausdina kiekvieną elementą po vieną atskirose eilutėse.
Išvestis:
Welcome to techcodeview.com>
2 pavyzdys: Padalinti naudojant a dvitaškis kaip a skyriklis
Kodas:
#!/bin/bash # Read the main string text='Welcome:to:techcodeview.com' # Split the string based on the delimiter, ':' readarray -d : -t strarr <<< '$text' # Print each value of the array by using # loop for (( n=0; n < ${#strarr[*]}; n++)) do echo '${strarr[n]}' done> Išvestis:
java poeilutė
Welcome to techcodeview.com>
3 būdas: padalinkite eilutę kelių simbolių skyrikliu
Taikant šį metodą, kintamasis naudojamas eilutės duomenims saugoti, o kitas kintamasis naudojamas kelių simbolių skyriklio duomenims saugoti. Masyvo kintamasis taip pat deklaruojamas, kad saugotų suskaidytą eilutę.
Kodas:
# Define the string to split text='HelloRomy HelloPushkar HelloNikhil HelloRinkle' # store multi-character delimiter delimiter='Hello' # Concatenate the delimiter with the # main string string=$text$delimiter # Split the text based on the delimiter newarray=() while [[ $string ]]; do newarray+=( '${string%%'$delimiter'*}' ) string=${string#*'$delimiter'} done # Print the words after the split for value in ${newarray[@]} do echo '$value ' done> Išvestis:
Romy Pushkar Nikhil Rinkle>