• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:シェルスクリプトで配列が使えない)

シェルスクリプトで配列が使えない

このQ&Aのポイント
  • シェルスクリプトを利用するときに変数を配列として扱えるという記述を見たのですが、エラーが出てきてしまいます。
  • 端末で直接入力すると、正しく動作します。そのためなぜエラーとなるのかわかりません。
  • 環境はubuntu 10.10、GNU bash, バージョン 4.1.5(1)-release (i686-pc-linux-gnu)です。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

ディストリビューション等によっては、 shがbashへのリンクになっている場合もあります。その場合、質問のスクリプトで動作します。 が、どうやら、あなたの環境ではshは拡張されていない元々の B-sh相当のもののようです。 配列はB-shそのものには無く、ksh,bash等の拡張版でのみ使えます。 #!/bin/bash にしたら動くのではないでしょうか。(bashのパスが違っていたらそれに合せて) > シェルスクリプトを利用するときに変数を配列として扱える シェルスクリプトにも大きく B-shとC-shがあり、それぞれに本来の仕様(sh,csh)と、拡張版(ksh,bash,zsh,tcsh等)があります。 それぞれで詳細が違いますので、単純に考えないようにしましょう。

BABTEP
質問者

お礼

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

その他の回答 (1)

  • 0909union
  • ベストアンサー率39% (325/818)
回答No.1

そのエラーは、シンタックスエラーですよね。 書式が違う場合と、括弧など足りなかったりする場合にでるエラーです。 まず、シェルの種類の勉強してください。 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 です

BABTEP
質問者

お礼

シェルスクリプトを使う方法として #!/bin/sh とまず書くというふうに、教えているサイトがあってこの様な問題が発生してしまいました。 おかげで#!/bin/beshがどのシェルでシェルスクリプトをまわすのか、という宣言であることがわかりました。 ありがとうございます。

関連するQ&A