Подтвердить что ты не робот

Bash массив: непредвиденная ошибка синтаксиса

Я пишу этот простой bash script следующим образом.

#!/bin/bash

array=( /home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf )
echo ${array[@]}

Я ожидал, что он напечатает все имена файлов в массиве. Но я получаю эту ошибку:

test.sh: 3: Syntax error: "(" unexpected

Если я изменил объявление массива на

array = {/home/abc/Downloads/something.bat /home/abc/Downloads/smb.conf}

эта ошибка исчезает, но у меня все еще есть новые ошибки.

test.sh: 3: array: not found
test.sh: 4: Bad substitution

Как я могу решить эту проблему? Это мой первый раз в программировании оболочки, поэтому я не могу самостоятельно решить проблемы.

ПОСТАНОВИЛИ:

Я выполнял его как sh test.sh, но я забыл, что должен был выполнить его как bash test.sh

4b9b3361

Ответ 1

Переменные назначения не могут иметь пробел вокруг знака =:

array=( /a/b/  /c/d )
     ^--no spaces 

Вы уверены?

[email protected]:~$ array =(a b)      
bash: syntax error near unexpected token `('
[email protected]:~$ array= (a b)  
bash: syntax error near unexpected token `('
[email protected]:~$ array = (a b)
bash: syntax error near unexpected token `('
[email protected]:~$ array=(a b)  
[email protected]:~$ echo ${array[1]}
b

Ответ 2

Указатель. Пространства важны с присвоением переменной в BASH. Не используйте их до или после знака равенства.

Ответ 3

Используете ли вы DOS-редактор для создания script?

Bash и т.д. оболочки, не любят пары CRLF, просто LF (или \r\n символы VS просто # t21 > char).

Поместите свой script через этот тест

cat -vet myScript.sh

Вы видите символы "^ M" в конце строк? Если это файл dos.

Посмотрите, есть ли у вашей системы dos2unix, затем используйте ее как

dos2unix myScript.sh

Кроме того, как прокомментировали несколько человек, отредактируйте исходный вопрос, чтобы устранить пробелы вокруг ваших знаков = в присваивании array.

Надеюсь, это поможет.