Oggi mi sono imbattuto in un comando interessante "[ ' (parentesi quadra) tramite il famoso blog Linux chiamato nixCraft. Era un post piuttosto interessante che spiegava l'uso di "/usr/bin/[ ' comando in Linux. Ma sai una cosa, lavoro in Linux da alcuni anni e non conoscevo questo comando fino a quando quel tweet di nixcraft non è apparso nel mio feed di notizie. L'ho imparato da voi ragazzi, grazie.
Bene, sto scrivendo questo post per condividere ciò che ho imparato da nixCraft. Fondamentalmente "/usr/bin/[ Il comando ' è uguale al 'test ' comando in Linux. Mi spiego.
Nella programmazione della shell, se vuoi verificare se un particolare file esiste o meno, allora normalmente usi IF cond non lo è? Qualcosa come quello mostrato di seguito:
if [ -f /etc/passwd ] then echo "Yes" else echo "No" fi
Ora, se "/etc/passwd ' esiste, quindi viene visualizzato l'output "Sì ” altrimenti “No “. È semplice e puoi fare lo stesso anche per confrontare i valori. Ma hai notato che "[ ' parentesi dopo 'se '? Ecco dov'è'/usr/bin/[ ' entra in scena.
In alternativa, puoi verificare se il file esiste o meno come di seguito (senza IF):
[demo ~]$ [ -f /etc/passwd ] && echo "Yes" || echo "No" Yes [demo ~]$ [ -f /etc/passwd1 ] && echo "Yes" || echo "No" No
Nello snippet sopra, puoi vedere '[' comando. Come detto, il comando è uguale a "test '. Dai un'occhiata all'esempio seguente:
if test -f /etc/passwd then echo "Yes" else echo "No" fi
Ok, entrambi "[ ' e 'test ' fa lo stesso lavoro, ma sono collegati simbolicamente? Ho controllato anche quello, ma non lo sono.
[demo ~]$ ls -l /usr/bin/test -rwxr-xr-x 1 root root 30064 Mar 21 2012 /usr/bin/test
[demo ~]$ ls -l /usr/bin/[ -rwxr-xr-x 1 root root 32296 Mar 21 2012 /usr/bin/[
Fondamentalmente, "[ ' è un comando di shell integrato. Confermalo usando "digita ' comando come di seguito:
[demo ~]$ type -a [ [ is a shell builtin [ is /usr/bin/[
Nota: Viene visualizzato "[ ' è un comando integrato in Linux. Significa che se il comando non contiene barre, SHELL proverà a individuarlo tramite PATH variabile.
Dato che è un comando, dovrebbe esserci una pagina di manuale no?
[demo ~]$ man [ No manual entry for [
Non sono riuscito a trovare la pagina man per '[ ', poi ho visto la pagina man di 'test ' dove in fondo c'era una nota che dice "[ '. Vedi sotto:
[demo ~]$ man test ::::::::::::: NOTE: your shell may have its own version of test and/or [, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supports.
Bonus... Come "[" c'è anche "[["
[demo ~]$ type -a [[ [[ is a shell keyword
'[[ ' è in realtà una parola chiave simile ad altre parole chiave in SHELL – '! fino al termine seleziona elif else esac fi per la funzione case if [[ ]] in then { } time '
Poiché è una parola chiave, non puoi trovarla come comando.
[demo ~]$ ls -l /usr/bin/[[ ls: /usr/bin/[[: No such file or directory
[demo@gridfs ~]$ whereis [[ [[: