1
腳本:
#!/bin/bash
declare -a arr=()
echo ${#arr[@]:-}
失敗上的Arch Linux(bash的4.4.5):
-bash: ${#arr[@]:-}: bad substitution
雖然它工作在Ubuntu 14.04(bash的4.3.11)或Debian的8(30年4月3日) 。
腳本:
#!/bin/bash
declare -a arr=()
echo ${#arr[@]:-}
失敗上的Arch Linux(bash的4.4.5):
-bash: ${#arr[@]:-}: bad substitution
雖然它工作在Ubuntu 14.04(bash的4.3.11)或Debian的8(30年4月3日) 。
在arrayfunc.c
的valid_array_reference
功能中,添加了以下檢查:
if (t[len+1] != '\0')
return 0;
因此,膨脹現在驗證在預期的點來結束,而以前,下標以下無效/意外的內容被忽略。
這在CWRU /更改日誌條目被記錄爲6/5如下:
arrayfunc.c
valid_array_reference
:確保數組引用是正確 第一個之後,終止標;返回無效的,如果有什麼 收盤]
值得注意的是,valid_array_reference
從subst.c
在valid_length_expression
稱爲繼 - 這被稱爲爲先導,以parameter_brace_expand_length
,其實際執行手頭的替代。
這個替換......實際上並沒有使*感*。你爲什麼期望它可以工作? (而且要清楚 - 如果某些事情沒有記錄起來,那麼它在將來停止工作不是一個錯誤,而只是未定義行爲的改變。 –
(數組長度不能爲空或空,因此「默認爲空」是沒有意義的)。 –
另一件事是,bash的git存儲庫實際上並沒有變更級別的粒度 - 每次他發佈新版本時,Chet都會做一次新的提交,所以沒有足夠的信息來平分「更改X ,用提交消息Y對錯誤Z做出響應,導致此行爲增量「。 –