String comparison (Bash)

Uit De Vliegende Brigade
Naar navigatie springen Naar zoeken springen

Voorbeelden van de gebruikelijke syntaxis voor string comparison op niet-bestaande of lege strings:

if [ -n "$var" ]; then
  # Do something when var is non-zero length
fi

if [ "$var" ]; then
  # Do something when var is non-zero length
fi

if [ -z "$var" ]; then
  # Do something when var is zero-length
fi

if [ ! "$var" ]; then
  # Do something when var is zero-length
fi

Maar wat is nu de beste manier om te testen op null of op een lege string? Nou, dat hangt er vanaf:

      1a    2a    3a    4a    5a    6a    |1b    2b    3b    4b    5b    6b
       [     ["    [-n   [-n"  [-z   [-z"  |[[    [["   [[-n  [[-n" [[-z  [[-z"
unset: false false true  false true  true  |false false false false true  true
null : false false true  false true  true  |false false false false true  true
space: false true  true  true  true  false |true  true  true  true  false false
zero : true  true  true  true  false false |true  true  true  true  false false
digit: true  true  true  true  false false |true  true  true  true  false false
char : true  true  true  true  false false |true  true  true  true  false false
hyphn: true  true  true  true  false false |true  true  true  true  false false
two  : -err- true  -err- true  -err- false |true  true  true  true  false false
part : -err- true  -err- true  -err- false |true  true  true  true  false false
Tstr : true  true  -err- true  -err- false |true  true  true  true  false false
Fsym : false true  -err- true  -err- false |true  true  true  true  false false
T=   : true  true  -err- true  -err- false |true  true  true  true  false false
F=   : false true  -err- true  -err- false |true  true  true  true  false false
T!=  : true  true  -err- true  -err- false |true  true  true  true  false false
F!=  : false true  -err- true  -err- false |true  true  true  true  false false
Teq  : true  true  -err- true  -err- false |true  true  true  true  false false
Feq  : false true  -err- true  -err- false |true  true  true  true  false false
Tne  : true  true  -err- true  -err- false |true  true  true  true  false false
Fne  : false true  -err- true  -err- false |true  true  true  true  false false

Casus feb. 2016

Script:

#!/bin/bash
sleutel=$1

if [ -z $sleutel ]; then
   echo "Er mankeert iets aan de eerste inputvariabele";
fi

Resultaat:

Invoer          Evaluatie
------          ---------
* Geen invoer   True
* ""            True
* " "           True
* Spaties       True
* Hoihallo      False