プロが教える店舗&オフィスのセキュリティ対策術

シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たので、
以下のようなシェルスクリプトを作成したのですが、エラーが出てきてしまいます。
端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。

環境はubuntu 10.10、
GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu)
です。


----------------------
#!/bin/sh

list=(`ls`)
echo ${list[0]}
----------------------

3:Syntax error: "(" unexpected

A 回答 (2件)

ディストリビューション等によっては、 shがbashへのリンクになっている場合もあります。

その場合、質問のスクリプトで動作します。

が、どうやら、あなたの環境ではshは拡張されていない元々の B-sh相当のもののようです。
配列はB-shそのものには無く、ksh,bash等の拡張版でのみ使えます。

#!/bin/bash

にしたら動くのではないでしょうか。(bashのパスが違っていたらそれに合せて)


> シェルスクリプトを利用するときに変数を配列として扱える

シェルスクリプトにも大きく B-shとC-shがあり、それぞれに本来の仕様(sh,csh)と、拡張版(ksh,bash,zsh,tcsh等)があります。
それぞれで詳細が違いますので、単純に考えないようにしましょう。
    • good
    • 0
この回答へのお礼

bashにしたら動きました。ありがとうございます。

お礼日時:2011/04/26 18:21

そのエラーは、シンタックスエラーですよね。



書式が違う場合と、括弧など足りなかったりする場合にでるエラーです。

まず、シェルの種類の勉強してください。

GNU bash,

となっていますが、スクリプトを見ると、SH ですね。これは互換で装備されているB-Shellを指しています。自分ではBASHを実行しているつもりが、実はUNIX時代のB-Shellを使用しています。もちろんエリアスなのでリンクしていなければですが。

次に、B-Shellの書式では ( ) は出てきません。

これは、C-Shell, K-Shell

しかありません。たぶん K-Shellの文献をよんだのでは。よくK-Shellを推奨している文献だと、B-Shellと混合して記載してあるのがみかけます。わざとなのか、本人がよくわかっていないのか? いずれにせよ。

B-Shellでの配列はありません。また () もありません。両方使えるのは

KSH

です。

http://homepage3.nifty.com/owl_h0h0/unix/job/UNI …
http://oshiete.goo.ne.jp/qa/1590859.html

http://homepage2.nifty.com/t-1000/linux/shell_ar …

ちなみに

#!/bin/besh

です
    • good
    • 0
この回答へのお礼

シェルスクリプトを使う方法として
#!/bin/sh
とまず書くというふうに、教えているサイトがあってこの様な問題が発生してしまいました。

おかげで#!/bin/beshがどのシェルでシェルスクリプトをまわすのか、という宣言であることがわかりました。

ありがとうございます。

お礼日時:2011/04/26 18:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!