Sono sempre sorpreso che nella cartella sia /bin
presente un [
programma.
È questo che viene chiamato quando stiamo facendo qualcosa del tipo if [ something ]
:?
Chiamando [
esplicitamente il programma in una shell, chiede un corrispondente ]
e quando fornisco la parentesi di chiusura sembra non fare nulla, indipendentemente da ciò che inserisco tra parentesi.
Inutile dire che il solito modo di ottenere aiuto su un programma non funziona, cioè né man [
né [ --help
funziona.
man '['
funziona bene per me - o hai dimenticato di citare [
o hai una diversa definizione di "opere".
[
valuta i suoi argomenti, quindi è necessario disporre di spazi tra tutti. [ a=b ]
non è un confronto: sarà sempre vero (è una singola stringa: "a = b", che viene sempre valutata come vera ) E dovresti limitare il numero di argomenti a 4 (anche se le recenti implementazioni consentiranno di più .. Limitare a 4 lo rende più portabile, ad esempio: [ "a" = "b" ]
ha già 4 argomenti: "a" "=" "b" e la fine non necessaria dell'argomento arg: "]"). Se hai bisogno di più: prove a catena con ad esempio:if [ "$Var_a" = "foo" ] && [ "$Var_b" = "bar" ] ; then : do something ; fi
!
da solo (senza caratteri di escape e non quotati) non verrà sostituito, e lo sarebbe ancora di più if ! [ ...
. Tutte le espansioni bash che usano !
includono almeno su altri personaggi
[
-builtin in bash
(e forse anche altre shell) e che questo può essere usato al posto di /bin/[
. Inoltre c'è il test
comando, che su molti sistemi è un collegamento simbolico a /bin/[
(o viceversa) - ma su altri è un comando separato.
[
riferisce altest
comando, noexpr
, quindi dovrebbe essereman test