Bash
在函式中顯示數組 - 不起作用
我在這裡想念什麼?
我創建了一個簡單的數組:
declare -a appArray=( "item1 -a -b" "item2 -c -d" )
如果我回應這個我可以看到這一切
echo ${appArray[@]} > item1 -a -b item2 -c -d
然後我創建一個函式如下:
fc_DEBUG () { if [ $1 -eq 1 ] ; then echo $2; fi; };
它被設計成放在 bash 腳本中,如果我設置了一個 DEBUG 變數,它將回顯文本。所以我可以在整個腳本中使用它,而無需手動添加/刪除東西。
它適用於基本數據:例如
fc_DEBUG $DEBUG "This is DEBUG text"
但是,如果我用數組呼叫它,我只會得到數組的一部分。
fc_DEBUG $DEBUG "${appArray[@]}" > item1 -a -b
${appArray[@]}
在執行前得到擴展fc_DEBUG
。所以函式看到的第二個參數是數組的第一個參數。明確地說,這三個論點fc_DEBUG
是$DEBUG "item1 -a -b" "item2 -c -d"
(代替 $ DEBUG with the words resulting from the split+glob operator applied to the actual value of $ 調試(因為你忘了引用它))。用技術術語來說,數組是按值傳遞的,而不是按引用傳遞的。
fc_DEBUG () { if [ "$1" -eq 1 ] ; then shift echo "$@" fi }
現在,第一個參數從參數列表中刪除
shift
,並列印所有參數的其餘部分。用帶引號的數組呼叫它:
fc_DEBUG "$DEBUG" "${appArray[@]}"