- ベストアンサー
シェルスクリプトで配列が使えない
- シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たのですが、エラーが出てきてしまいます。
- 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。
- 環境はubuntu 10.10、GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu)です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ディストリビューション等によっては、 shがbashへのリンクになっている場合もあります。その場合、質問のスクリプトで動作します。 が、どうやら、あなたの環境ではshは拡張されていない元々の B-sh相当のもののようです。 配列はB-shそのものには無く、ksh,bash等の拡張版でのみ使えます。 #!/bin/bash にしたら動くのではないでしょうか。(bashのパスが違っていたらそれに合せて) > シェルスクリプトを利用するときに変数を配列として扱える シェルスクリプトにも大きく B-shとC-shがあり、それぞれに本来の仕様(sh,csh)と、拡張版(ksh,bash,zsh,tcsh等)があります。 それぞれで詳細が違いますので、単純に考えないようにしましょう。
その他の回答 (1)
- 0909union
- ベストアンサー率39% (325/818)
そのエラーは、シンタックスエラーですよね。 書式が違う場合と、括弧など足りなかったりする場合にでるエラーです。 まず、シェルの種類の勉強してください。 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/UNIX/tool/ksh.html#Array http://okwave.jp/qa/q1590859.html http://homepage2.nifty.com/t-1000/linux/shell_array.html ちなみに #!/bin/besh です
お礼
シェルスクリプトを使う方法として #!/bin/sh とまず書くというふうに、教えているサイトがあってこの様な問題が発生してしまいました。 おかげで#!/bin/beshがどのシェルでシェルスクリプトをまわすのか、という宣言であることがわかりました。 ありがとうございます。
お礼
bashにしたら動きました。ありがとうございます。