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
-
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?
-
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";
-
(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?
#!/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á.
-
IFS je Bashovská proměnná, která říká co má brát jako oddělovač.
$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.
-
(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?
#!/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` ..