Bash - převod proměnné do pole

Bash - převod proměnné do pole
« kdy: 23. 01. 2022, 20:25:22 »
vyduckoval jsem si příkaz a celý šťastný ho přidal do scriptu
Kód: [Vybrat]
vstupsoub='stáhnout_čína.txt'
vstupsoubB=${vstupsoub:0:(-4)}
readarray -d _ -t vstupSouborAr<<<"$vstupsoubB"
 for word in "${vstupSouborAr[@]}"; do
  echo -e "'${word}'"
 done
výsledkem je toto:
'stáhnout'
'čína
'
co by mne zajímalo je, jak se do druhé (nebo možná poslední?) položky pole dostane ten nový řádek (před převodem - řádek s readarray - je to ok)
případně alespoň nějaký tip, kde bych mohl hledat, jak to má vlastně fungovat - manuálovou stránku to nemá a v manuálu bashe se o tom nepíše (nebo jsem slepej ;) )


k3dAR

  • *****
  • 2 838
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:Bash - převod proměnné do pole
« Odpověď #1 kdy: 23. 01. 2022, 21:00:19 »
Kód: [Vybrat]
vstupsoub='stáhnout_čína.txt'
vstupsoubB=${vstupsoub%.txt}
mapfile -d '_' -t vstupSouborAr < <(echo "${vstupsoubB}" | tr -d '\n')

for word in "${vstupSouborAr[@]}"; do
    echo -e "'${word}'"
done
1. misto "readarray" pouzit "mapfile" (je to to same, ale u mapfile najdes napovedu pres "help mapfile" (nejde o manualovou stranku ale napovedu interniho bash prikazu)  ;-)
2. misto definovani vstupsoubB pres "odzacatku & odeber 4 znaku od konce", prehlednejsi "od konce odeber znaky .txt"
3. misto <<< vycteni z promnene, << ( vycteni z vystupu prikazu kde tr zajistuje odebrani znaku noveho radku

nevim zda mi neco neunika, ale volba -t (u mapfile ci readarray) ktera ma v popisu "odstraneni znaku noveho radku" to NEdela pokud definujes pres -d jinej oddelovac nez vychozi znak konce radku, pak -t (coz take chces) odstranuje znak oddelovace, v tvem pripade _ z kazde prirazene promene...

Re:Bash - převod proměnné do pole
« Odpověď #2 kdy: 23. 01. 2022, 22:08:08 »

Re:Bash - převod proměnné do pole
« Odpověď #3 kdy: 25. 01. 2022, 09:56:52 »
...

Jiná varianta, nevím zda to přesně odpovídá zadání:

vstupsoub='stáhnout_čína.txt'
IFS=_
set -- ${vstupsoub%.txt}
for x
do
    echo "'$x'"
done

Re:Bash - převod proměnné do pole
« Odpověď #4 kdy: 29. 01. 2022, 21:07:21 »
...
Přesně tomuhle způsobu převodu textu do pole (krz IFS), jsem se snažil od začátku vyhnout.

Když jsem našel odpověď, kterou jsem hledal, šlo mi o pochopení toho co dělám (včetně toho, jak se mi dostal konec řádku do položky pole) a materiály ze kterých by se to dalo vyčíst, protože se mi to v manuálech a na netu nedařilo najít.

Odpověď kterou jsem získal od k3dAR, byla v tomto ohledu naprosto úžasná ;)