Che cosa sta succedendo
La shell (bash) vede l'argomento [a-z]. Questo è un modello jolly (un glob ), che corrisponde a qualsiasi lettera minuscola¹. Pertanto la shell cerca un nome file che corrisponda a questo modello. Esistono tre casi:
- Nessun file nella directory corrente ha un nome che è una singola lettera minuscola. Quindi la shell lascia invariato il modello jolly e
trvede gli argomenti -de [a-z]. Questo è ciò che accade sulla maggior parte delle tue macchine.
- Un singolo file nella directory corrente ha un nome che è una singola lettera minuscola. Quindi la shell espande il modello con questo nome di file e
trvede gli argomenti -de il nome del file. Questo accade sul server e viene chiamato il file corrispondente opoiché possiamo vedere che ha treliminato la lettera o.
- Due o più file nella directory corrente hanno un nome che è una singola lettera minuscola. Quindi la shell espande il modello all'elenco dei nomi file corrispondenti e
trvede tre o più argomenti: -de i nomi file. Poiché si traspetta un solo argomento dopo -d, si lamenterà.
Cosa avresti dovuto fare
Se nell'argomento di un comando sono presenti caratteri speciali, è necessario evitarli. Inserisci l'argomento tra virgolette singole '…'(questo è il modo più semplice, ce ne sono altri). All'interno delle virgolette singole, tutti i personaggi si distinguono da soli tranne la virgoletta singola stessa. Se nell'argomento è presente una virgoletta singola, sostituirla con'\'' .
tr -d '[a-z]'
Tuttavia nota che probabilmente non è ancora quello che volevi dire! Questo dice trdi cancellare lettere minuscole e parentesi quadre. È equivalente a tr -d ']a-z[', tr '[]a-z'ecc. Per eliminare lettere minuscole, utilizzare
tr -d a-z
L'argomento trè un set di caratteri. Metti le parentesi attorno a un set di caratteri in un'espressione regolare o in un jolly per indicare che si tratta di un set di caratteri. Ma trfunziona su un singolo personaggio alla volta. I suoi argomenti della riga di comando sono quelli che inseriresti tra parentesi .
Sono necessarie parentesi per indicare le classi di caratteri . In un'espressione regolare, si usano parentesi tra parentesi per indicare una classe di caratteri, ad es. [[:lower:]]*Corrisponde a qualsiasi numero di lettere minuscole, [[:lower:]_]*corrisponde a qualsiasi numero di lettere minuscole e caratteri di sottolineatura. Nell'argomento di tr, è necessario l'insieme senza le parentesi quadre circostanti, quindi tr -d '[:lower:]'elimina le lettere minuscole, tr -d '[:lower:]_'elimina lettere minuscole e caratteri di sottolineatura, ecc.
¹ In alcune versioni locali potrebbe corrispondere ad altri caratteri .
trintervalli sono scritti senza racchiudere[...]. Cosìtr -d '[a-z]'uccideràa-z, e anche personaggi[e]. Usatr -d a-zper uccidere solo letterea-z.