Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: basic bash script  (Přečteno 2232 krát)

Muschaas

  • Návštěvník
  • Příspěvků: 20
basic bash script
« kdy: 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?

nettezzaumana

  • Host
Re: basic bash script
« Odpověď #1 kdy: 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";

alfonz19

  • Aktivní člen
  • *
  • Příspěvků: 219
Re: basic bash script
« Odpověď #2 kdy: 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á.

premet

  • Host
Re: basic bash script
« Odpověď #3 kdy: 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.

nettezzaumana

  • Host
Re: basic bash script
« Odpověď #4 kdy: 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` ..
« Poslední změna: 12 Dubna 2009, 11:31:40 od nettezzaumana »

 

Provoz zaštiťuje spolek OpenAlt.