Bash

bash中兩種數組列印方法的區別

  • March 1, 2022

我在我的腳本中聲明了一個數組。

NAME[0]=Deepak
NAME[1]=Renuka
NAME[2]=Joe
NAME[3]=Alex
NAME[4]=Amir

echo "All Index: ${NAME[*]}"
echo "All Index: ${NAME[@]}"

有兩種列印整個數組的方法,如上所示。有人可以寫下這些方法之間的區別嗎?

  • echo "All Index: ${NAME[*]}"等於echo "All Index: ${NAME[0]} ${NAME[1]} ${NAME[2]} ${NAME[3]} ${NAME[4]}"
  • echo "All Index: ${NAME[@]}"如果變數echo "All Index: ${NAME[0]}" "${NAME[1]}" "${NAME[2]}" "${NAME[3]}" "${NAME[4]}"的第一個字元是空格,則等於(預設)IFS

你可以在copy.sh中看到執行結果。


IFS變數的預設值為$' \t\n'${array[*]}並輸出由變數$*的第一個字元分割的字元串。IFS也可以更改要拆分的字元。

NAME[0]=Deepak
NAME[1]=Renuka
NAME[2]=Joe
NAME[3]=Alex
NAME[4]=Amir

IFS=:
echo "All Index: ${NAME[*]}"
# Output: `All Index: Deepak:Renuka:Joe:Alex:Amir`

IFS=
echo "All Index: ${NAME[*]}"
# Output: `All Index: DeepakRenukaJoeAlexAmir`

IFS=$', \t\n'
echo "All Index: ${NAME[*]}"
# Output: `All Index: Deepak,Renuka,Joe,Alex,Amir`

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