
Objasnění cyklu v BASH
Zdravím. Může mi prosím někdo zkušený v Bash objasnit tento zápis ?
R1 ARR=()
R2 while read -r number text; do
R3 ARR+=( ${number//\"} "${text//\"}" )
R4 done < filedata
Zatím jsem zjistil, že
R1 vytoří prázdné pole
R2 je cyklus který plní proměnnou number a text
R3 přidá do pole další položku s obsahem z proměnné number a text
R4 konec cyklu a název souboru ze kterého se mají číst data
Co nemůžu nikde najít
R2 podle čeho získá proměnnou number a text, jak pozná co je co ?
R3 co přesně dělají ta lomítka a nesmyslně zapsané uvozovky viz ${number//\"} "${text//\"}" ?
Taky jsem nikde nenašel, jak by měl takový soubor s názvem filedata vypadat, jaký formát měl mít jeho obsah ?
Pokud někdo objasní, budu moc rád. Děkuji vám
Das si do google slova bash read a citas si. Napr. http://wiki.bash-hackers.org/commands/builtin/read
read cita jeden riadok a rozdeli ho na premenne podla slov (medzier). Do poslednej premennej idu vsetky zvysne slova v riadku
Das si do google slova bash array a citas si. Napr. arrays Strci to tie 2 veci do pola.
Znak \ je tam preto lebo " by znamenalo ze zacina nejaky retazec, \" znamena samotny znak ".
Co robi ten ${} - mal by vratit hodnotu toho co je vovnutri. Neviem presne jak to je myslene v tom tvojom scripte, a ani nerobim s bash :)
P.S. ale predpokladam ze to zo vstupu typu
1 neco1
2 neco2
atd
vytvori pole 1//"neco1//" 2//"neco2//" atd. Neviem zhlavy ved si to vyskusaj co to do toho pola zapisalo.
man bash
Parameter Expansion
${parameter/pattern/string}
Pattern substitution. The pattern is expanded to produce a pattern just as in pathname expansion. Parameter is expanded and the longest match of
pattern against its value is replaced with string. If pattern begins with /, all matches of pattern are replaced with string. Normally only the
first match is replaced. If pattern begins with #, it must match at the beginning of the expanded value of parameter. If pattern begins with %, it
must match at the end of the expanded value of parameter. If string is null, matches of pattern are deleted and the / following pattern may be omit‐
ted. If parameter is @ or *, the substitution operation is applied to each positional parameter in turn, and the expansion is the resultant list.
If parameter is an array variable subscripted with @ or *, the substitution operation is applied to each member of the array in turn, and the expan‐
sion is the resultant list.
takze jde o formu kde pattern zacina /, cili se nahradi vsechny vyskyty, pattern je (oescapovana) uvozovka a string chybi, tudiz muze chybet i lomitko pred nim
vysledek je hodnota number (nebo text) s odstranenyma uvozovkama
do pole to strci jako jednu polozku number (prvni slovo na radku), jako druhou polozku cely zbytek radku, jako jedno slovo (proto je ten ${..} v uvozovkach) a odstrani to pripadne uvozovky ze vstupu, aby se ta struktura nerozbila