L'operatore ==
viene utilizzato per confrontare due stringhe nello script della shell. Tuttavia, voglio confrontare due stringhe ignorando il caso, come può essere fatto? C'è qualche comando standard per questo?Confronto insensibile alle maiuscole/minuscole delle stringhe nello script shell
risposta
se avete bash
str1="MATCH"
str2="match"
shopt -s nocasematch
case "$str1" in
$str2) echo "match";;
*) echo "no match";;
esac
altrimenti, dovresti dirci quale shell stai usando.
alternativa, utilizzando awk
str1="MATCH"
str2="match"
awk -vs1="$str1" -vs2="$str2" 'BEGIN {
if (tolower(s1) == tolower(s2)){
print "match"
}
}'
shopt -s nocaseglob
Nessun inserimento manuale per shopt.Its non disponibili sul mio sistema –
nocasematch per archi. – ghostdog74
@ghostdog, mi piace il tono –
Un modo sarebbe quello di convertire entrambe le stringhe di superiore o inferiore:
test $(echo "string" | /bin/tr '[:upper:]' '[:lower:]') = $(echo "String" | /bin/tr '[:upper:]' '[:lower:]') && echo same || echo different
Un altro modo sarebbe quello di utilizzare grep:
echo "string" | grep -qi '^String$' && echo same || echo different
var1=match var2=MATCH if echo $var1 | grep -i "^${var2}$" > /dev/null ; then echo "MATCH" fi
Come risposta dal ghostdog74 ma il codice leggermente diverso
shopt -s nocasematch
[[ "foo" == "Foo" ]] && echo "match" || echo "notmatch"
shopt -u nocasematch
Bello perché le istruzioni 'case' (comprese quelle nella risposta di ghostdog) faranno sempre la scansione della mia pelle – SeldomNeedy
Per shell korn, uso typeset comando integrato (-l per minori -case e -u per maiuscole).
var=True
typeset -l var
if [[ $var == "true" ]]; then
print "match"
fi
Questo è il modo migliore, in termini di prestazioni rispetto all'avvio di awk o qualsiasi altro processo. – Alex
in bash, è possibile utilizzare l'espansione di parametro per modificare una stringa a tutti in basso a/maiuscole:
var1=TesT
var2=tEst
echo ${var1,,} ${var2,,}
echo ${var1^^} ${var2^^}
Almeno una risposta che non implichi l'opzione shopt. Quindi puoi confrontare due casi di ignorare le stringhe e, nello stesso test, confrontarne altri due con il caso. Grazie – jehon
Questo è nuovo in Bash 4? Almeno in Bash 3.2.51 (usato in OS X 10.9) non funziona - la prima istruzione 'echo' restituisce:' -bash: $ {var1 ,,}: sostituzione errata' –
Tali implementazioni di confronto case-insensitive sono soggetto a problemi di localizzazione (come il problema turco I). Non so come sia implementato 'shopt -s nocasematch', ma in genere tali soluzioni" a livello di lingua "gestiscono correttamente. –
Tutte queste risposte ignorare il modo più semplice e veloce per fare questo (come finché si dispone di Bash 4):
if [ "${var1,,}" = "${var2,,}" ]; then
echo ":)"
fi
Tutto quello che sta facendo ci sta convertendo entrambe le stringhe di lettere minuscole e confrontando i risultati.
La risposta più adatta. – Luciano
Questo è disponibile solo in Bash 4 o versioni successive (ad esempio non su Mac OS X 10.11) – d4Rk
@ d4Rk, motivo per cui la prima frase della mia risposta dice "finché hai Bash 4". Detto questo, Bash 4 è uscito da più di sette anni al momento della stesura di questo commento, e la mia installazione di OS X è durata quasi così a lungo. – Riot
Ecco la mia soluzione con tr:
var1=match
var2=MATCH
var1=`echo $var1 | tr '[A-Z]' '[a-z]'`
var2=`echo $var2 | tr '[A-Z]' '[a-z]'`
if [ "$var1" = "$var2" ] ; then
echo "MATCH"
fi
molto facile se si fgrep di fare una linea di case-insensitive confrontare:
str1="MATCH"
str2="match"
if [[ $(fgrep -ix $str1 <<< $str2) ]]; then
echo "case-insensitive match";
fi
Funziona anche per 'grep' e' egrep'? – jww
- 1. Confronto delle stringhe MySQL
- 2. esportazione non funziona nello script shell
- 3. espressione regolare insensibile alle maiuscole in javascript
- 4. Stringa insensibile alle maiuscole :: trova
- 5. Elaborazione o threading parallelo nello script Shell
- 6. confronto di stringhe in script bash
- 7. Crea o variabili di shell nello script Linker
- 8. Gson, JsonElement, confronto delle stringhe in Java
- 9. Perché il confronto delle stringhe non funziona?
- 10. Confronto delle stringhe di data in Java
- 11. Array insensibile alle maiuscole in Lua
- 12. argomento non valido per l'opzione '-resize' nello script di shell
- 13. confronto bash, trattini e stringhe
- 14. Registrazione di prefissi con la data nello script di shell
- 15. Qual è la differenza tra $ @ e $ * nello script di shell?
- 16. Condizioni multiple nello script della shell di istruzioni if
- 17. Controllare l'output di un comando nello script di shell
- 18. Tempo di incremento (minuti e secondi) nello script bash/shell
- 19. Rileva presenza di contenuto di stdin nello script di shell
- 20. Esegui un singolo comando nello script di shell senza sudo
- 21. Come recuperare tutti gli strumenti utilizzati nello script di shell
- 22. Modifica per utente root nello script di shell
- 23. Aggiungere contenuto di utilizzo nello script della shell senza getopts
- 24. argomento di passaggio che contiene spazio nello script di shell
- 25. Come ottenere l'estensione di un file nello script di shell
- 26. Una riga if/else condition nello script di shell linux
- 27. Che cosa $? $ 0 $ 1 $ 2 significa nello script di shell?
- 28. come leggere un singolo carattere nello script di shell
- 29. come manipolare la matrice nello script di shell
- 30. Operazione temporanea in una directory temporanea nello script di shell
Per chiunque paragoni stringhe usando le istruzioni' if', l'approccio 'shopt' richiede che tu usi la forma a due parentesi' [[]] ' invece del modulo '[]' a parentesi singola. Vedi anche: http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html – indiv
La domanda indica che '==' è usato per confrontare due stringhe, ma la risposta dimostra caso- confronto insensibile usando una dichiarazione "caso". In modo rassicurante, la soluzione 'shopt' consente anche l'uso senza distinzione tra maiuscole e minuscole di' == ',' = ~ 'e altri operatori di confronto delle stringhe. – taranaki
Probabilmente è saggio eseguire 'shopt -u nocasematch' dopo che il confronto è stato eseguito per tornare ai valori predefiniti di bash. –