2017-03-13 7 views
1

スクリプト:

#!/bin/bash  
declare -a arr=() 
echo ${#arr[@]:-} 

がアーチLinux上で失敗する(bashの4.4.5):

-bash: ${#arr[@]:-}: bad substitution 

それはUbuntuの14.04(bashの4.3.11)やDebian 8上で動作している間(4.3.30) 。 arrayfunc.cvalid_array_reference関数で

+3

この置き換えは実際には意味がありません。なぜあなたはそれがまったく動作すると思いますか? (そして、明らかに - 何かが文書化されていないと、それが将来的には動作しなくなるのはバグではなく、未定義の動作の変化です)。 –

+0

(配列の長さは空でも空でもかまいません。したがって、 "デフォルトは空"は意味がありません)。 –

+0

もう一つは、bash用のgitリポジトリは実際にチェンジセットレベルの粒度を持っていないということです。チェットは新しいリリースを公開するたびに新しいコミットを行いますので、 "Xを変更するバグZに応答してメッセージYをコミットし、このデルタが動作する原因となりました。 –

答えて

5

は、以下のチェックが追加されました:

if (t[len+1] != '\0') 
    return 0; 

したがって、膨張が現在予想時点で終了するように検証され、以前に、添字以下無効/予期しないコンテンツが無視されたのに対し。

arrayfunc.c

  • valid_array_referenceは:配列への参照が適切に最初の後に終了 であることを確認して、次のように

    この

    は6/5のためCWRU/changelogのエントリに記載されています添字;実際に手での置換を行いparameter_brace_expand_lengthへの前駆体として呼ばれて - 特に、valid_array_referencevalid_length_expressionsubst.cから呼び出された決算]

次 何がある場合、無効を返します。

関連する問題