Array
Mapfile 不刪除尾隨換行符
- 範例數據:製表符分隔的 tsv 文件
a.1.58 fadado/CSV https://github.com/fadado/CSV a.1.63 jehiah/json2csv https://github.com/jehiah/json2csv a.1.80 stedolan/jq https://github.com/stedolan/jq/issues/370
- 下面使用 fzf 選擇一條記錄,並將第 2 列和第 3 列儲存到數組 Link 中:
mapfile -d $'\t' -t Link < <(awk 'BEGIN{FS="\t"; OFS="\t"} {print $2,$3}' "${SessionP}" | fzf)
問題
在上面的命令中,我使用
-t
了 mapfile 選項,但echo "${Link[1]}"
列印了一個尾隨的新行!為什麼沒有被淘汰?
參考
檢查您的本地文件,而不是在網路上其他地方找到的文件。在互動式
bash
shell 會話中,鍵入help mapfile
或查找手冊 ( )mapfile
中的文件。根據您的 版本,文件可能與網路上的不同。bash``man bash``bash
在我的系統上,使用
bash
5.1.8,help mapfile
記錄了這樣的-t
選項mapfile
:
-t
從讀取的每一行中刪除尾隨的 DELIM(預設換行符)
DELIM
設置為-d
:
-d delim
使用 DELIM 終止行,而不是換行這意味著當使用
-d $'\t' -t
with時mapfile
,它將刪除一個尾隨製表符(如果有的話),而不是尾隨換行符。該
bash
外殼mapfile -d
自 4.4 版以來一直存在。此選項的介紹記錄如下:
mapfile
內置程序現在可以選擇-d
使用任意字元作為記錄分隔符,並且可以-t
選擇剝離分隔符,如-d
.要在列印最後一個元素時從數據中刪除尾隨換行符,請
"${Link[1]%$'\n'}"
在輸出元素時使用。如果最後一個字元是換行符,則從元素中刪除最後一個換行符。