Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Muschaas 11 Dubna 2009, 12:10:40

Název: basic bash script
Přispěvatel: Muschaas 11 Dubna 2009, 12:10:40
Zdar,

potřeboval jsem napsat super-easy bash script zpracovávající text, ale potřeboval jsem si mezivýsledky uložit do proměnné. A co to? read PROM zavolané na řetězec "     123123" mi do A uloží jen "123123". Jak to, proč to? Co s tím?
Název: Re: basic bash script
Přispěvatel: nettezzaumana 11 Dubna 2009, 13:59:22
no, zrovna asi pred rokem jsem tupe koukal do manualu (`man bash`) asi hodinu, nez jsem prisel na to, ze to jde udelat napriklad takhle:

## spatne
read -s FOO; echo "$FOO";

## dobre
IFS= read -s FOO; echo "FOO";
Název: Re: basic bash script
Přispěvatel: alfonz19 12 Dubna 2009, 00:11:32
(sorry za odpověď pod jiným id, původní dotaz jsem omylem položil pod brášinovým účtem)
whoa! Super funguje to. Škoda že nevím proč. Mohl bys to nějak okomentovat?

Kód: [Vybrat]
#!/bin/bash

IFS=read A;
while [ -n "$A" ]; do
    echo "$A";     #uvozovky jsou nutne, jinak interpretuje hvezdicky
    IFS= read A;
done

co je sakra IFS? Předpokládám, že to není proměnná, protože když smažu tu mezeru za IFS= tak to padá.
Název: Re: basic bash script
Přispěvatel: premet 12 Dubna 2009, 10:45:49
IFS je Bashovská proměnná, která říká co má brát jako oddělovač.

Citace
$IFS

    internal field separator

    This variable determines how Bash recognizes fields, or word boundaries, when it interprets character strings.

    $IFS defaults to whitespace (space, tab, and newline), but may be changed, for example, to parse a comma-separated data file.
Název: Re: basic bash script
Přispěvatel: nettezzaumana 12 Dubna 2009, 11:29:21
(sorry za odpověď pod jiným id, původní dotaz jsem omylem položil pod brášinovým účtem)
whoa! Super funguje to. Škoda že nevím proč. Mohl bys to nějak okomentovat?

Kód: [Vybrat]
#!/bin/bash

#### ?? spatne. chybi mezera nebo "" aka IFS=""
IFS=read A;
while [ -n "$A" ]; do
    echo "$A";     #uvozovky jsou nutne, jinak interpretuje hvezdicky
    IFS= read A;
done

co je sakra IFS? Předpokládám, že to není proměnná, protože když smažu tu mezeru za IFS= tak to padá.
`man bash` ..