Dnes jsem narazil na zajímavý příkaz ‘[ “ (hraná závorka) prostřednictvím slavného linuxového blogu s názvem nixCraft. Byl to docela zajímavý příspěvek, který vysvětloval použití ‘/usr/bin/[ ‘ příkaz v Linuxu. Ale víte co, pracuji v Linuxu již několik let a tento příkaz jsem neznal, dokud se v mém kanálu zpráv neobjevil tweet z nixcraftu. Naučil jsem se to od vás, díky.
No, píšu tento příspěvek, abych se podělil o to, co jsem se naučil od nixCraft. V podstatě ‘/usr/bin/[ Příkaz ‘ je roven příkazu ‘test ‘ příkaz v Linuxu. Dovolte mi to vysvětlit.
Pokud chcete v programování shell někdy zkontrolovat, zda konkrétní soubor existuje nebo ne, pak normálně použijete IF cond is not? Něco jako je zobrazeno níže:
if [ -f /etc/passwd ] then echo "Yes" else echo "No" fi
Nyní, pokud ‘/etc/passwd ‘ existuje, pak uvidíte výstup „Ano “ jinak „Ne “. To je jednoduché a můžete totéž udělat pro porovnání hodnot. Ale všimli jste si, že „[ ' závorka za 'if ‘? Zde je ‘/usr/bin/[ ‘ přichází na scénu.
Případně můžete zkontrolovat, zda soubor existuje nebo ne, jak je uvedeno níže (bez IF):
[demo ~]$ [ -f /etc/passwd ] && echo "Yes" || echo "No" Yes [demo ~]$ [ -f /etc/passwd1 ] && echo "Yes" || echo "No" No
Ve výše uvedeném úryvku můžete vidět ‘[‘ příkaz. Jak již bylo řečeno, příkaz je roven ‚test ‘. Podívejte se na níže uvedený příklad:
if test -f /etc/passwd then echo "Yes" else echo "No" fi
Dobře, obě „[ “ a „test ‘ dělá stejnou práci, ale jsou symbolicky propojeny? Zkontroloval jsem to také, ale nejsou.
[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/[
V podstatě „[ ‘ je vestavěný příkaz shellu. Potvrďte to pomocí „type ‘ příkaz jako níže:
[demo ~]$ type -a [ [ is a shell builtin [ is /usr/bin/[
Poznámka: Vidíte „[ ‘ je vestavěný příkaz v Linuxu. To znamená, že pokud příkaz neobsahuje žádná lomítka, SHELL se jej pokusí najít pomocí PATH proměnná.
Protože se jedná o příkaz, měla by existovat manuálová stránka, ne?
[demo ~]$ man [ No manual entry for [
Nepodařilo se mi najít manuálovou stránku pro „[ ‘, pak jsem viděl manuálovou stránku ‘test “ kde ve spodní části byla poznámka, která říká „[ ‘. Viz níže:
[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… Stejně jako „[“ je zde také „[[“
[demo ~]$ type -a [[ [[ is a shell keyword
„[[ ‘ je ve skutečnosti klíčové slovo podobné ostatním klíčovým slovům v SHELL – ‘! dokud nebude hotovo, vyberte elif else esac fi pro funkci případu if [[ ]] in then while { } time ‘
Protože se jedná o klíčové slovo, nemůžete jej najít jako příkaz.
[demo ~]$ ls -l /usr/bin/[[ ls: /usr/bin/[[: No such file or directory
[demo@gridfs ~]$ whereis [[ [[: