Unix Bourne Shellの配列

Unix Bourne Shellの配列

/bin/shBourneシェル()で配列を使用しようとしています。配列要素を初期化する方法は次のとおりです。

arr=(1 2 3)

しかし、エラーが発生しました。

syntax error at line 8: `arr=' unexpected

今、私はこの構文について私が見つけた投稿では、私は私のためのものであるが、bashBourneシェルのための別の構文を見つけることができません。構文は/bin/sh同じですか?

ベストアンサー1

/bin/sh最近、システムにはBourneシェルはほとんどありません(Bourneシェルを含む最後の主要システムの1つであるSolarisも、Solaris 11で/ bin / shをPOSIX shに切り替えました)。/bin/sh1970年代初頭のトンプソン砲弾。 1979年、BourneシェルはUnix V7でそれを置き換えました。

/bin/sh長年にわたり、それはBourneシェル(またはBSDで無料で再実装されたAlmquistシェル)でした。

最近では、ksh88言語のサブセット(およびBourneシェル言語の親セットですが一部の非互換性)に基づくPOSIX言語用のインタプリタまたは他のインタプリタが/bin/shより一般的です。sh

BourneシェルまたはPOSIX sh言語仕様では配列はサポートされていません。または、位置パラメータ($1、、、、したがって各関数にも配列があります)という1つの配列しかありません。$2$@

ksh88にはを使用して設定された配列がありますが、set -A構文が厄介で使いやすくないため、POSIX shでは指定されません。

配列/リスト変数を持つ他のシェルには、次のcshものが含まtcshれています。rcesbashyashzshfishrcfishzsh

標準からsh(Bourneシェルの最新バージョンでも動作します):

set '1st element' 2 3 # setting the array

set -- "$@" more # adding elements to the end of the array

shift 2 # removing elements (here 2) from the beginning of the array

printf '<%s>\n' "$@" # passing all the elements of the $@ array 
                     # as arguments to a command

for i do # looping over the  elements of the $@ array ($1, $2...)
  printf 'Looping over "%s"\n' "$i"
done

printf '%s\n' "$1" # accessing individual element of the array.
                   # up to the 9th only with the Bourne shell though
                   # (only the Bourne shell), and note that you need
                   # the braces (as in "${10}") past the 9th in other
                   # shells (except zsh, when not in sh emulation and
                   # most ash-based shells).

printf '%s\n' "$# elements in the array"

printf '%s\n' "$*" # join the elements of the array with the 
                   # first character (byte in some implementations)
                   # of $IFS (not in the Bourne shell where it's on
                   # space instead regardless of the value of $IFS)

(Bourneシェルとksh88ではこれを機能させるには$IFS空白文字を含める必要があります(バグ"$@")。$9${10}shift 1; echo "$9"

おすすめ記事