Bash: É '[[' também um programa como '['?

4

A condição de teste [ é um programa que está residindo em distribuições baseadas em debian em /usr/bin/[ . Eu gostaria de saber se o outro testador de condição [[ também é um programa?

A razão pela qual estou perguntando: concedi sudo direitos a um determinado usuário para que ele acionasse um script de shell. Por motivos de segurança, estou adicionando o caminho completo para cada programa ( echo a /bin/echo e [ a /usr/bin/[ ) usado nesse script, para que o usuário não altere seu PATH para usar seu próprios programas. Agora eu estou querendo saber se eu tenho que mudar [[ também.

    
por chevallier 09.05.2018 / 22:24

1 resposta

5

man bash

RESERVED WORDS
Reserved words are words that have a special meaning to the shell. The following words are recognized as reserved when unquoted and either the first word of a simple command (see SHELL GRAMMAR below) or the third word of a case or for command:

! case coproc do done elif else esac fi for function if in select then until while { } time [[ ]]

Portanto, [[ é uma palavra reservada e, portanto, não pode ser um comando externo. Pode haver um arquivo desse tipo, mas ele deve ser chamado com o caminho completo ou com aspas.

E mesmo se houvesse um comando externo, ele não funcionaria da mesma maneira, porque [[ como parte da gramática de shell altera as regras de análise até o próximo ]] . Comandos externos não podem fazer isso.

    
por 09.05.2018 / 22:32

Tags