Ce face | tr -d în bash? (Programare, Bash, Țeavă)

Alex Cory a intrebat.

Poate cineva să explice ce face acest cod?

if [ -f "saved.txt" ]; then                // What does -f do?
    rm saved.txt
fi

in=$(echo "{query}" | tr -d "
)          // How does this work? 
                                           // What does | tr -d "
 mean?

echo "$in" > saved.txt                     // Is this simply putting the 
                                           // value of $in into saved.txt?

2 răspunsuri
Brian

Instrucțiunea inițială if va testa dacă fișierul este un fișier obișnuit. Mai multe despre operatorii de testare a fișierelor aici.

Acest script va reda caracterele {query} și le va transmite la comanda tr, care cu ajutorul comenzii -d va șterge caracterele care sunt specificate. tr reprezintă traducerea. În acest caz, se ia un SET și, conform paginii de manual, va șterge backslash-urile dacă folosiți \.

Rezultatul este stocat în $in.

În cele din urmă, rezultatul stocat în in va fi afișat pe saved.text.

NUME tr – traduce sau șterge caractere

SYNOPSIS tr [OPTION]… SET1 [SET2]

DESCRIERE Traduce, comprimă și/sau șterge caractere de la intrarea standard, scriind la ieșirea standard.

   -c, -C, --complement
          first complement SET1

   -d, --delete
          delete characters in SET1, do not translate

   -s, --squeeze-repeats
          replace  each  input  sequence  of  a repeated character that is listed in SET1 with a single occurrence of that
          character

   -t, --truncate-set1
          first truncate SET1 to length of SET2

   --help display this help and exit

   --version
          output version information and exit

   SETs are specified as strings of characters.  Most represent themselves.  Interpreted sequences are:

   NNN   character with octal value NNN (1 to 3 octal digits)

   \     backslash

chepner

Prima parte testează dacă saved.txt există înainte de a încerca să îl elimine.

A doua parte copiază conținutul din query (presupun că este o greșeală de scriere și că ar trebui să fie ${query}, nu {query}) în in, minus orice backslash-uri.

A treia parte, aveți dreptate; scrie valoarea lui in în fișierul saved.txt.