Minulla on komentotulkkikomento, jossa meillä on seuraavat rivit if [ -z "$xyz" ]
ja if [ -n "$abc" ]
, mutta en ole varma, mikä niiden tarkoitus on. Voisiko kukaan selittää?
Vastaa
Löydät erittäin mukavan viitteen bashin operaattoreille täältä . Jos käytät eri kuorta, etsi vain <my shell> operators
ja löydät kaiken tarvitsemasi. Sinun tapauksessasi olet käyttämällä:
-n string is not null. -z string is null, that is, has zero length
Havainnollistamaan:
$ foo="bar"; $ [ -n "$foo" ] && echo "foo is not null" foo is not null $ [ -z "$foo" ] && echo "foo is null" $ foo=""; $ [ -n "$foo" ] && echo "foo is not null" $ [ -z "$foo" ] && echo "foo is null" foo is null
kommentteja
Vastaa
man test
tai man [
antaa sinulle kaikki vaihtoehdot testata komentoa. Tässä tapauksessa -n testaa, onko $ abc: n sisällön pituus nollasta poikkeava, ja -z testaa, onko $ xyz: n sisältö nollan pituinen merkkijono.
Kommentit
- mies [ei toimi ' ei toimi minulle GNU bashin version 4.1.2 (1) julkaisussa (x86_64- redhat-linux-gnu). Mutta +1 ihmiskokeelle.
- Huomautus
man test
(aina?) Antaa ulkoisen ohjelman version man-sivun, joka (GNU-coreutils-versiolle osoitteessa vähintään) varoittaa nimenomaisesti, että joillakin (useimmat IME) -kuorilla on sisäänrakennettu versio, joka voi olla erilainen.
Vastaa
Laajentamaan terdonin vastausta , huomasin, että Unix / Linux – Shell Basic Operators on Tutorials Point sisältää myös tiedostoihin liittyvät operaattorit (samoin kuin muutkin hyödylliset).
-b file Checks if file is a block special file; if yes, then the condition becomes true. [ -b $file ] is false. -c file Checks if file is a character special file; if yes, then the condition becomes true. [ -c $file ] is false. -d file Checks if file is a directory; if yes, then the condition becomes true. [ -d $file ] is not true. -f file Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. [ -f $file ] is true. -g file Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. [ -g $file ] is false. -k file Checks if file has its sticky bit set; if yes, then the condition becomes true. [ -k $file ] is false. -p file Checks if file is a named pipe; if yes, then the condition becomes true. [ -p $file ] is false. -t file Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. [ -t $file ] is false. -u file Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. [ -u $file ] is false. -r file Checks if file is readable; if yes, then the condition becomes true. [ -r $file ] is true. -w file Checks if file is writable; if yes, then the condition becomes true. [ -w $file ] is true. -x file Checks if file is executable; if yes, then the condition becomes true. [ -x $file ] is true. -s file Checks if file has size greater than 0; if yes, then condition becomes true. [ -s $file ] is true. -e file Checks if file exists; is true even if file is a directory but exists. [ -e $file ] is true.
-n
toimimaan, se voi johtua siitä, että seuraat joitain huonoja oppaita verkossa (esimerkiksi GeeksforGeeks tai TutorialsPoint ), jotka eivät lainaa muuttujia. Tämä vastaus ja tähän linkitetty opas lainaa oikein se. Jos käytät-n
-laatua lainaamatta, se kertoo sinulle, että se ' ei ole tyhjä, vaikka se onkin! @terdon, kiitos paljon!