Bash

在函式中顯示數組 - 不起作用

  • January 13, 2016

我在這裡想念什麼?

我創建了一個簡單的數組:

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[@]}"

引用自:https://unix.stackexchange.com/questions/255074