2016-06-03 36 views
8

Quando scrivo:bash "echo", tra cui ">" nel file creando mezzo - si prega di spiegare

echo 2*3>5 is a valid inequality 

Nel mio terminale bash, viene creato un nuovo file chiamato 5 nella mia directory che contiene:

2*3 is a valid inequality 

Voglio sapere che cosa sta succedendo esattamente qui e perché sto ottenendo questo risultato? Credo sia ovvio che sono nuovo di Linux! Grazie

+5

Utilizzare le virgolette: '$ echo "2 * 3> 5 è una disuguaglianza valida"' In caso contrario, il vostro sono [reindirizzamento] (http://www.tldp.org/LDP/abs/html/io-redirection.html) l'output – dawg

+2

non è così ovvio. Ho usato Linux per 15 anni, non avevo idea che potessi mettere il reindirizzamento ovunque fino ad ora. – njzk2

+0

@ njzk2, POSIX non richiede che sia supportato in un punto diverso dall'inizio o alla fine, ma non * disabilita * tale comportamento; quindi, è un'estensione bash, ma perfettamente legale. –

risposta

7

bash fa il reindirizzamento uscita prima cioè >5 è fatta per prima e viene creato un file denominato 5 (o troncato se esiste già). Il descrittore di file risultante rimane aperto per il runtime del comando echo.

Quindi la parte restante, 2*3 is a valid inequality, viene eseguita come argomento su echo e l'output standard viene salvato nel file (già aperto) 5 alla fine.

per ottenere l'intera stringa come l'uscita, utilizzare virgolette singole o doppie:

echo '2*3>5 is a valid inequality' 
12

In bash, i reindirizzamenti possono verificarsi in qualsiasi punto della linea (ma non dovresti farlo! --- vedi the bash-hackers tutorial). Bash prende lo >5 come reindirizzamento, crea il file di output 5 e quindi elabora il resto degli argomenti. Pertanto, si verifica echo 2*3 is a valid inequality, che fornisce l'output visualizzato nel file di output 5.

Ciò che probabilmente quello che volete è

echo "2*3>5 is a valid inequality" 

o

echo '2*3>5 is a valid inequality' 

(con virgolette singole), ciascuno dei quali vi darà il messaggio si specifica come una stampa sulla riga di comando. La differenza è che, entro "", le variabili (ad esempio $foo) verranno compilate, ma non entro lo ''.

Edit: Il bash man page dice che gli operatori di redirezione

possono precedere o apparire ovunque all'interno di un comando semplice o possono seguire un comando. I reindirizzamenti vengono elaborati nell'ordine in cui appaiono, da sinistra a destra.

+2

Quindi, se ho capito bene, non importa dove metto '> nomefile'! Vale a dire il seguente: 'comando qualche testo> nomefile di qualche testo' metterà l'output di comando che è' some text some text' qui, in un file chiamato filename, giusto ?? – secluded

+1

@secluded Sì, per quanto ne so. Ho aggiunto un riferimento alla pagina man per ulteriori dettagli. – cxw

3

Questo è un esempio di output redirection. Stai istruendo l'istruzione echo su, invece di scrivere sullo standard, scrivere su un nome file. Quel nome file è "5".

si può evitare che il comportamento citando:

echo "2*3>5 is a valid inequality"