Informazione

6.0 Elimina gatto

6.0 Elimina gatto



We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

6.0 Elimina gatto pippo /tmp/bar, cat /tmp/bar >, /tmp/pippo

7.0 ./bar: nessun file o directory del genere

7.0 ./pippo: nessun file o directory del genere

7.0 ./foo /tmp/bar: nessun file o directory del genere

7.0 ./bar /tmp/foo: nessun file o directory del genere

7.0 ./bar /tmp/foo /tmp/bar: nessun file o directory del genere

7.0

UN:

Il comportamento che stai vedendo è dovuto al tuo utilizzo della funzione globbing della shell. Se vuoi che il comando cat si comporti nel modo in cui stai descrivendo, dovresti fare esplicitamente un confronto globbing.

if [ "$a" = "$(echo $a | cut -f1 -d/ )" ] , allora

eco partita

altro

eco non corrisponde

fi

Il comando cut viene utilizzato per eseguire un'operazione di globbing iniziale.

$ echo "pippo/bar" | taglia -f1 -d/

pippo

$ echo "pippo/bar" | taglia -f1 -d/

sbarra

L'istruzione if funziona quindi per eseguire il confronto del globbing e valuta l'espressione della shell solo se il globbing corrisponde.

In generale, i confronti del globbing sono un po' più difficili da fare in shell rispetto ai linguaggi di programmazione più tradizionali (Python, Ruby, ecc.), ed è una buona idea controllare se si stanno usando le funzionalità di globbing in modo appropriato.

UN:

Perché stai usando = not =~ nella condizione.

Quando lo fai

a =$(echo $a | cut -f1 -d/ )

if [ "$a" = "$(echo $a | cut -f1 -d/ )" ]

poi

eco partita

altro

eco non corrisponde

fi

Si confronta in questo modo, a non è uguale a $(echo $a | cut -f1 -d/ ) che non è uguale alla stringa vuota a causa dello spazio.

Per risolvere questo problema puoi farlo

if [ "$a" = "$(echo $a | cut -f1 -d/)" ]

poi

eco partita

altro

eco non corrisponde

fi

UN:

a =$(echo $a | cut -f1 -d/ )

È necessario utilizzare le virgolette attorno a = e aggiungere ] alla fine. Questo ti darebbe quello che vuoi.

a =$(echo $a | cut -f1 -d/ )

if [ "$a" = "$(echo $a | cut -f1 -d/ )" ]

Se non aggiungi ] alla fine del tuo script, allora [ "bar" = "pippo/bar" ] valuterà come vero, poiché pensa che "bar" = "pippo/" sia un'espressione valida. Anche la prima parte non funzionerà quando aggiungi ] alla fine. Deve essere doppiamente citato.

Il modo più semplice per leggere il valore di $a (e il suo valore in qualsiasi punto dello script) è usare un [ e un'istruzione case.

a =$(echo $a | cut -f1 -d/ )

caso $a in

/foo/bar/) echo "a is 'foo/bar'", a='' ,,

*) echo "a non è 'pippo/bar'", a='pippo/bar' ,,

esac

if [ "$a" = "$(echo $a | cut -f1 -d/ )" ]

Questo prende il valore di $a e lo controlla con un valore noto. Quindi questa istruzione case riporta $a al valore noto. Se il valore di $a non è uno dei valori validi, stamperà il messaggio di errore sullo schermo.

Usando questo metodo, non ci sono problemi con le virgolette doppie e singole e funzionerà correttamente in tutti i casi in cui la tua versione corrente non funziona.

Un altro modo più elegante per farlo è usare alcune estensioni GNU.

if [[ "$a" = "$(echo $a | cut -f1 -d/)" ]]

Il comando [[ restituisce true se la stringa fornita è vuota. Poiché il test viene valutato sulla stringa vuota e non sul valore di $a, questo è molto più efficiente.


Guarda il video: versa cat delete (Agosto 2022).

Video, Sitemap-Video, Sitemap-Videos