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 .