我有兩個要存盤在 Bash 變數中的檔案名:
為此,我做了:
$ b=$(ls Fisher_GCph_WL_XSAF_COLUMN*PESS_F*gamma_*)
我得到的變數b等于:
$ echo $b
Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt
Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt
我想構建一個包含上述 2 個檔案名的 2 個元素的陣列。
我試圖通過以下方式訪問它們:
$d eclare -a b
$ echo ${b[0]}
什么都不回傳
和
$ echo ${b[1]} 回傳 F
如何擁有一個字串陣列,我可以通過索引0或直接訪問第一個或第二個檔案名1?
uj5u.com熱心網友回復:
您只需要一個簡單的陣列分配和通配符。
shopt -s nullglob
b=(Fisher_GCph_WL_XSAF_COLUMN*PESS_F*gamma_*)
uj5u.com熱心網友回復:
您使用的索引表示法是正確的。這里的問題b不是一個陣列,而是一個多行字串。
宣告一個真正的陣列:
b=("Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt" "Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt")
注意 - 元素之間沒有逗號
bash 將b視為一個陣列:
declare -a b='([0]="Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt" [1]="Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt")'
比較從 ls 回傳:
$ c=$(ls) $ declare -p c declare -- c="Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt"
在你的情況下,我會
- 創建中間檔案:
ls -1 > filelist
這是 'one' 而不是 'l' - 每個檔案一行
- 將檔案轉換為陣列:
$mapfile -t b < filelist
- 驗證 b 是一個陣列:
$ declare -p b
- 使用陣列:
echo ${b[1]}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407338.html
標籤:
上一篇:將大文本檔案逐段拆分為多個小檔案
下一篇:將n個引數傳遞給bash腳本
