20

この単純な 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として実行する必要があることを忘れていました

4

3 に答える 3

5

=変数の代入では、記号の周りにスペースを入れることはできません:

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

本気ですか?

marc@panic:~$ array =(a b)      
bash: syntax error near unexpected token `('
marc@panic:~$ array= (a b)  
bash: syntax error near unexpected token `('
marc@panic:~$ array = (a b)
bash: syntax error near unexpected token `('
marc@panic:~$ array=(a b)  
marc@panic:~$ echo ${array[1]}
b
于 2012-06-14T03:22:15.377 に答える
2

ポインター: BASH での変数の割り当てでは、スペースが重要です。等号の前後に使用しないでください。

于 2012-06-14T03:30:36.553 に答える
0

スクリプトの作成に DOS エディタを使用していますか?

Bash などのシェルは、CRLF ペアが好きではなく、LF (または\r\nchars VS プレーン\nchar) だけです。

スクリプトをこのテストに通します

cat -vet myScript.sh

行末に '^M' 文字がありますか? もしそうなら、それはdosファイルです。

システムに dos2unix があるかどうかを確認してから、次のように使用します

dos2unix myScript.sh

また、何人かがコメントしているので、元の質問を編集して、=への課題で記号の周りのスペースを削除してくださいarray

これが役立つことを願っています。

于 2012-06-14T03:42:47.853 に答える