'Erro de sintaxe: “(” inesperado ”ao criar um array

24

Eu tenho dois servidores Debian (Debian). Estou criando um script de shell.

No primeiro eu crio um array assim:

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)

Isso funciona bem. Mas quando eu corro isso no outro servidor eu recebo:

Syntax error: "(" unexpected

Tanto quanto eu posso dizer ambos os servidores são os mesmos. Alguém pode esclarecer por que isso não funciona?

Se eu digitá-lo diretamente no terminal, tudo bem?

Parece que quando eu corro como

sh scriptname.sh

Eu recebo o erro, mas se eu o executar como

./scriptname.sh

parece estar ok. Qual a diferença?

    
por IGGt 07.01.2016 / 15:42

3 respostas

37

Quando você usa ./scriptname.sh , ele executa com /bin/bash , como na primeira linha com #! . Mas quando você usa sh scriptname.sh , ele executa sh , não bash .

O shell sh não tem sintaxe para criar matrizes, mas o Bash tem a sintaxe usada.

    
por 07.01.2016 / 16:06
0

Executar ./scriptname.sh resultará na leitura da primeira linha do arquivo e verá que ele precisa executar ´ / bin / bash´ e passar o restante do script para o interpretador, enquanto a execução de sh scriptname.sh passará o arquivo para o shell padrão do usuário (por exemplo, Ash) e que o outro interpretador não suporte matrizes como o Bash faz.

    
por 07.01.2016 / 16:02
0

Com sh scriptname.sh , você está executando com sh , não necessariamente com bash . Tente comparar sh --version em ambas as máquinas. E / ou com dpkg -S $(which sh) .

    
por 07.01.2016 / 16:02