Массив Bash: непредвиденная синтаксическая ошибка [закрыто]

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

#!/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

 user135757614 июн. 2012 г., 05:57
@DennisWilliamson О, хорошо. Я буду редактировать это
 Dennis Williamson14 июн. 2012 г., 05:46
Это не ассоциативный массив. Это обычный, численно проиндексированный массив.
 Daenyth14 июн. 2012 г., 06:01
@ user1357576: опубликуйте решение как ответ и отметьте его как принятое, не редактируйте его в вопросе. Кроме того, не редактируйте заголовок, чтобы решить его, веб-сайт помечает вопрос как решенный, когда вы принимаете ответ.

Ответы на вопрос(3)

Bash и т.д. оболочки, не такие как пары CRLF, просто LF (или\r\n Чарс В.С. просто ясно\n голец).

Поместите свой сценарий через этот тест

cat -vet myScript.sh

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

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

dos2unix myScript.sh

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

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

= знак:

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
 user135757614 июн. 2012 г., 05:23
Неудачно. Я удалил пробел все еще дает мне синтаксическую ошибку
 14 июн. 2012 г., 05:38
@ user1357576: отлично работает, когда я помещаю вышеупомянутое в файл. Конечно, строки синтаксической ошибки убивают сценарий, но если это только окончательное назначение без пробелов, он работает нормально.
 user135757614 июн. 2012 г., 05:50
Я знаю, что я сделал не так. Я выполнял его как sh test.sh, а затем он выдавал ошибку. Когда я выполнил его как ./test.sh, он работал нормально!
 user135757614 июн. 2012 г., 05:32
Интересно, когда я выполняю это непосредственно на терминале, это работает. Но когда я использую то же самое в файле, это не так!
 14 июн. 2012 г., 05:53
Ах да, sh не всегда 'sh'. В Ubuntu 12.04 это на самом деле псевдоним для «dash». ракушка.

пробелы важны с присвоением переменной в BASH. Не используйте ихbefore или жеafter знак равенства.

 user135757614 июн. 2012 г., 05:34
Я понимаю, что & gt; Я выполнял те же самые команды непосредственно на терминале, и это работало. НО те же самые команды, которые я вставил в test.sh и выполнил, они выдают ошибку. Знаете ли вы, почему?
 14 июн. 2012 г., 05:53
@ user1357576 Из вашего комментария выше видно, что вы узнали разницу междуsh а такжеbash. sh не гарантируетсяbash в некоторых средах. По факту,sh часто связан с чисто POSIX-оболочками, такими какdash.

Ваш ответ на вопрос