rcmdnk's blog

すぐわかるSUPER Excel配列マジックを極める 営業、経理、総務もこれでExcelマスター! 面倒な集計や計算処理が格段に楽になる! (すぐわかるシリーズ)

BashとZshは同じ様なシェルスクリプトを書くことが出来ますが 機能的な違いが微妙にあります。

特に大きな違いとして配列の番号がBashでは0から始まるのに対してZshでは通常1から始まることがあります。

これに対する対処法について。

Bash/Zshの違い

BashとZsh基本的には似たような機能を持ち、 Zshの方が機能が豊富、といった感じのものですが 同じ様な機能で微妙に機能が違うものが結構借ります。

その辺をまとめたのが以下の記事。

特に配列が0番から始まるか1番から始まるか、という違いは結構大きいと思います。

Zshでは通常1番から始まりますが、

setopt ksharrays

とすると0番から始まる様になります。

ある関数の中だけ、とかで有効にしたい場合には

setopt localoptions ksharrays

とすると関数を抜ければ元の状態に戻ります。

Bash/Zshで共通の動作をする関数を作る

以下の様な関数を作るとksharraysなどを設定しなくても Bash/Zshで同じ動作で同じ番号のものを取得することが出来ます。

1
2
3
4
5
get_n () {
  local n=$(($1+1))
  shift
  eval echo \$${n}
}

これを使って

get_n 1 "${array[@]}"

とすればarrayの1番目のものを取得できます。 ただし、これは0から始まった番号です。

Zshでもこれで

a=(a b c)
get_n 1

とすればksharraysの 設定に関わらずbが取得出来ます。

Zshの様に1からスタートしたければ

1
2
3
4
5
get_n () {
  local n=$1
  shift
  eval echo \$${n}
}

としておけばOK。

Sponsored Links
Sponsored Links

« sd_cl: pecoやfzfなどにも対応したディレクトリ移動効率化ツール ターミナルで超高速にディレクトリを戻る/進む »

}