Non sono sicuro se si desidera rilevare se una variabile è unset
o empty
. Queste sono 2 cose diverse.In particolare, una variabile può essere impostata ma essere vuota:
$ var=""
$ if [ -z "$var" ]; then echo empty; fi
$ empty
Lo stesso sta succedendo qui:
#!/usr/bin/env bash
set -u
echo $1
prova:
$ ./test.sh
./test.sh: line 4: $1: unbound variable
$ ./test.sh ""
$
O qui:
#!/usr/bin/env bash
tag=${1?Need a value}
echo $tag
Test:
$ ./se.sh
./se.sh: line 3: 1: Need a value
$ ./se.sh ""
$
Altri poster hanno presentato i modi corretti per rilevare una variabile vuota e non impostata. Personalmente mi piace questo modo di rilevamento variabili vuote e non impostate:
#!/usr/bin/env bash
if [ "$1"A = A ]
then
echo variable is empty or unset
fi
Test:
$ ./empty.sh ""
variable is empty or unset
$ ./empty.sh
variable is empty or unset
$ ./empty.sh 1
$
fonte
2015-07-01 15:28:34
http://mywiki.wooledge.org/BashGuide/TestsAndConditionals#Conditional_Blocks_.28if.2C_test_and_.5B.5B.29 –
caso una variabile costituita da spazi bianchi solo in questo modo: 'var =" "' essere considerato vuoto o no? –
sì, variabile costituita da spazi bianchi, considerata vuota. fondamentalmente, sto pensando di mettere un assegno come se [[! -z "$ {Tag}" && "$ {Tag}"! = '']] per questo. –