LoginSignup
0
0

More than 1 year has passed since last update.

古いバージョンのbashで使ってた変数展開が使えなくなってた話

Posted at

bash 4.1.x~4.2.xあたりで使ってた以下のようなスクリプトを4.4.xのbashで動かしたときにエラーが出るようになった

sample.sh
param += ( $@ )
sample_var += ${param[@]:1:((${#param[@]-2}))}
echo ${sample_var}

内容としては、引数を配列paramにいれてそっからparamの一部をsample_varに格納するという内容だが
4.2.xまでのbashで実行した場合は特にエラーは発生せず期待通りの出力が得られた。
しかし、4.4.xで実行した場合は以下のエラーとなる。

line 2: ((${#param[@]-2})): bad substitution

まぁ、そもそも2行目のsyntaxが間違っていて
正しくは以下だ。これなら4.4.x~でも動く。

sample_var += ${param[@]:1:((${#param[@]}-2))}

古いバージョンのbashだと上手く動いてたのが謎。
詳しいことはよくわからないので有識者の方説明お願いします。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0