Shell Script - String List - Array - 1
原始討論
原始討論「回覆: shell中 `` 與()問題請教」。
回覆內容
你上面的字拼錯了,「m」拼成「n」, 也就是「sample1」拼成「sanple1」,兩個變數名稱不一致,所以沒有資料。
改成下面的就可以了
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
echo ${sample1[*]}
依據你給的範例,拆解成下面的步驟,你就比較清楚了
範例一
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
IFS=$'\n'
echo ${sample1[*]}
顯示
Jan Feb Mar Apr Jun Jul Aug
顯示一行,即使你有改「IFS」。
範例二
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
IFS=$'\n'
echo "${sample1[*]}"
顯示多行
Jan
Feb
Mar
Apr
Jun
Jul
Aug
用「雙引號」把「${sample1[*]}
」括起來,就會顯示多行了
範例三
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
IFS=$'\n'
echo "${sample1[*]}" | sort
因為是多行,所以可以丟給「sort」處理排序。
所以就顯示排序過後的結果
Apr
Aug
Feb
Jan
Jul
Jun
Mar
範例四
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
IFS=$'\n'
sample2=`echo "${sample1[*]}" | sort` # 這時候 sample2 是「字串」不是「陣列」
echo ${sample2[0]}
顯示
Apr Aug Feb Jan Jul Jun Mar
範例五
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
IFS=$'\n'
sample2=(`echo "${sample1[*]}" | sort`) # 多加了「()」,這時候 sample2 才是「陣列」
echo ${sample2[0]}
顯示
Apr
範例六
這個範例的邏輯跟「範例五」,是一樣的,只是「``」改成「$()」的寫法而已
#!/usr/bin/env bash
sample1=('Jan' 'Feb' 'Mar' 'Apr' 'Jun' 'Jul' 'Aug')
IFS=$'\n'
sample2=($(echo "${sample1[*]}" | sort))
echo ${sample2[0]}
顯示
Apr