Por que meu script de shell fornece o erro: “declarar: não encontrado”?

5

Aqui está um exemplo simples mostrando que usando declare em um script, o script não será executado, enquanto o script será fornecido:

$ cat /tmp/new
#! /bin/sh
declare -i  hello
$ chmod a+rwx /tmp/new
$ /tmp/new
/tmp/new: 3: declare: not found
$ source /tmp/new
$ 

Eu me pergunto por que executar diretamente o script não funciona, enquanto o sourcing funciona? Como posso fazer o primeiro trabalho? Obrigado!

    
por Tim 31.07.2011 / 02:54

4 respostas

9

declare é uma função incorporada e não está disponível com /bin/sh , apenas com bash ou zsh (e talvez outras camadas). A sintaxe pode diferir de um shell para outro. Você deve escolher seu sheebang ( #! ) de acordo.

    
por 31.07.2011 / 02:59
6

declare é uma extensão bash e zsh. No seu sistema, /bin/sh não é nem bash nem zsh (provavelmente é cinza), portanto declare não está disponível. Você pode usar typeset em vez de declare ; eles são sinônimos, mas typeset também funciona no ksh. Em cinza, não há equivalente a typeset -i ou a maioria dos outros usos do typeset embutido. Você não precisa realmente de typeset -i para declarar uma variável inteira; tudo o que ele faz é permitir alguns atalhos sintáticos como hello=2+2 para hello=$((2+2)) .

    
por 31.07.2011 / 23:58