O ile mi wiadomo, [[jest ulepszoną wersją [, ale jestem zdezorientowany, gdy widzę [[jako słowo kluczowe i [jest wyświetlany jako wbudowany.
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP mówi
Wbudowany może być synonimem polecenia systemowego o tej samej nazwie, ale Bash ponownie go implementuje wewnętrznie. Na przykład polecenie echa Bash nie jest takie samo jak / bin / echo, chociaż ich zachowanie jest prawie identyczne.
i
Słowo kluczowe to słowo zastrzeżone, token lub operator. Słowa kluczowe mają specjalne znaczenie dla powłoki i faktycznie są elementami składni składni powłoki. Jako przykłady, dla, while, do i! są słowami kluczowymi. Podobnie jak wbudowane słowo kluczowe jest na stałe zakodowane w Bash, ale w przeciwieństwie do wbudowanego słowa kluczowego samo w sobie nie jest poleceniem, ale podjednostką konstrukcji polecenia. [2]
Nie powinno to zrobić zarówno [i [[słowa kluczowego? Czy coś tu mi brakuje? Również ten link ponownie potwierdza, że zarówno [i [[powinien należeć do tego samego rodzaju.
if "[" $x -eq 3 ]działa zgodnie z oczekiwaniami (bo Bash wygląda polecenia o nazwie [, a ta istnieje), ale if "[[" $x -eq 3 ]]nie nie działa (bo znowu Bash wyszukuje polecenie odpowiedniej nazwy, ale tam nie ma [[Komenda).
/usr/bin/echo, ale to nie znaczy, że to nie jest wbudowane .