Nello script Bash, qual è la differenza tra i seguenti frammenti?Script Bash se istruzioni
1) con staffe singole:
if [ "$1" = VALUE ] ; then
# code
fi
2) usando una doppia parentesi
if [[ "$1" = VALUE ]] ; then
# code
fi
Nello script Bash, qual è la differenza tra i seguenti frammenti?Script Bash se istruzioni
1) con staffe singole:
if [ "$1" = VALUE ] ; then
# code
fi
2) usando una doppia parentesi
if [[ "$1" = VALUE ]] ; then
# code
fi
Il costrutto [[]] è la versione Bash più versatile di []. Questo è il comando di test esteso, adottato da ksh88.
Utilizzando la [[...]] prova costrutto, piuttosto che [...] può prevenire molti errori logici negli script. Ad esempio, il & &, ||, <, e> operatori lavorano all'interno di un test [[]], pur dando un errore all'interno costrutto [].
More info on the Advanced Bash Scripting Guide.
Nei tuoi frammenti, non c'è alcuna differenza come non si sta utilizzando una delle funzioni aggiuntive.
Utilizzando [[
sopprime la normale espansione wordsplitting e il percorso sul espressione fra parentesi. Consente inoltre un numero di operazioni di aggiunta, ad esempio la corrispondenza di modelli
[
è un built-in bash, [[
è una parola chiave. Vedi lo bash FAQ. Attenzione: la maggior parte degli script di bash su Internet sono crap (non funzionano con nomi di file con spazi, introducono buchi di sicurezza nascosti, ecc.) E bash è molto più difficile da padroneggiare di quanto si possa pensare. Se si desidera eseguire la programmazione bash, è necessario studiare almeno lo bash guide e lo bash pitfalls.
Just in è necessario portabilità caso:
Per la portabilità test è possibile ottenere la Bourne shell tramite il progetto Heirloom o:
http://freshmeat.net/projects/bournesh
(In Mac OS X, per esempio,/bin/sh c'è shell Bourne puro.)
che è anche un programma esterno, che non significa che non è un comando incorporato.
which [
/usr/bin/[
In singole parentesi quadre si devono utilizzare per -lt 'meno di' alias < mentre il resto si potrebbe usare <
if [ 3 -lt 4 ] ; then echo yes ; fi
yes
if [ 3 < 4 ] ; then echo yes ; fi
bash: 4: No such file or directory
if [[ 3 < 4 ]] ; then echo yes ; fi
yes
if [[ 3 -lt 4 ]] ; then echo yes ; fi
yes
4: mezzi Nessun file, tenta di leggere da un file denominato "4" - reindirizzamento stdin < Lo stesso per> e stdout.
[domanda Simile] (http://stackoverflow.com/questions/2188199/bash-double-or-single-bracket-parentheses-curly-braces) –