Mai mult
Cum am compara două variabile șir într-un 'daca' declarație în Bash?
Am'm încercarea de a obține un "dacă" declarație de a lucra în Bash (folosind Ubuntu):
#!/bin/bash
s1="hi"
s2="hi"
if ["$s1" == "$s2"]
then
echo match
fi
Am'am incercat diverse forme de "dacă" declarație, folosind [["$s1" == "$s2"]]
, cu și fără ghilimele, folosind=
, = = " și " - eq
, dar eu încă a lua următoarea eroare:
[hi: comanda nu a fost găsit
Am'am cautat pe diverse site-uri și tutoriale și copiat, dar nu't de lucru - cu ce am gresit?
În cele din urmă, vreau să spun că dacă $s1 "conține" $s2
, deci cum pot face asta?
Am făcut doar locul de muncă în spații pic.. :/ Cum să-I spun conține?
Am încercat
if [[ "$s1" == "*$s2*" ]]
dar nu't de lucru.
568
12
Pentru comparație șir, utilizați:
Pentru " a "conține " b", utilizați:
(și asigurați-vă că pentru a adăuga spații între simboluri):
rău:
bun:
Ai nevoie de spații:
Trebuie să aveți grijă să lăsați un spațiu între semnul de '[' si ghilimele duble în cazul în care variabila contine aceasta:
Anii
^
s show spațiile goale trebuie să pleci.Îți sugerez asta:
Observa spațiu alb între deschidere/închidere paranteze și variabile și, de asemenea, spații albe ambalaj '=' semn.
De asemenea, fii atent de script header. L's nu-i același lucru dacă utilizați
sau
Aici's sursa.
Aș sugera:
Fără ghilimele și cu un singur egal.
Bash4+ exemple. Notă: nu folosiți citate va provoca probleme atunci când cuvintele nu conțin spații etc.. Mereu citat în bash OMI.
Aici sunt câteva exemple BASH4+ :
Exemplul 1, verificați pentru 'da' în șir de caractere (majuscule):
Exemplul 2, pentru a verifica 'da' în șir de caractere (majuscule):
Exemplu 3, pentru a verifica 'da' din string (case sensitive) :
Exemplu 4, verifica 'da' din string (case sensitive):
Exemplu 5, potrivire exactă (case sensitive):
Exemplu 6, potrivire exactă (majuscule):
Exemplu 7, potrivire exactă :
Această întrebare a fost deja răspunsuri mari, dar aici se pare că există o mică confuzie între, folosind un singur egal și dublu egal în
Principala diferență constă în limbaj de scripting care sunt utilizați. Dacă utilizați bash include apoi
#!/bin/bash
în incepand de script-ul și de a salva script cafilename.bash
. Pentru a executa folosesc bash filename.bash- atunci va trebui să utilizați
==`.Dacă utilizați sh apoi utilizați
#!/bin/sh
și de a salva script cafilename.sh
. Pentru a executa folosesc sh filename.sh- atunci va trebui să utilizați un singur
=`. Evita amestecarea lor.Eu nu't au acces la o cutie de linux acum, dar este de fapt un program (și un bash interna), deci eu cred ca trebuie sa pui un spatiu intre [ si primul parametru.
De asemenea, rețineți că șirul operator egalitatea pare a fi o singur =
Acest lucru este mai mult o clarificare mult de raspuns ! Da , indiciul este în mesaj de eroare:
care arată că "buna" a fost concatenate la "[".
Spre deosebire de în mai multe limbaje de programare tradiționale, în Bash, "[" este o comanda doar ca mult mai evident "e" etc. - l's nu este tratată special doar pentru că-l's un simbol, prin urmare, "[" și (înlocuit) "$s1" care sunt imediat lângă altul în întrebarea dumneavoastră, sunt unite (ca este corect pentru Bash) și apoi încearcă să găsească o comandă în poziția asta: [hi - care este necunoscut pentru Bash.
În C și în alte limbaje, "[" ar fi văzut ca un alt "clasa de caracter" și ar fi disjuncte din următoarele "buna".
Prin urmare, aveți nevoie de un spațiu după deschiderea "[".
Pentru o versiune cu pur Bash și fără "test", dar într-adevăr urât, încercați:
Explicație: În
( )
un plus de subshell este deschis. Iese cu 0 dacă nu a fost un meci, și încearcă să ieși cu $s1 dacă nu a fost nici un meci care ridică o eroare (urât). Această eroare este îndreptată spre/dev/null
.Adăugarea suplimentară șir în interiorul face mai sigure.
Ai putea folosi, de asemenea, alte notații pentru o singură linie de comandă: