- サンプルデータ:タブ区切りの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 番目の列を配列リンクに保存します。
mapfile -d $'\t' -t Link < <(awk 'BEGIN{FS="\t"; OFS="\t"} {print $2,$3}' "${SessionP}" | fzf)
質問
上記のコマンドで-t
mapfileオプションを使用しましたが、echo "${Link[1]}"
末尾の改行が印刷されました!
なぜ削除されなかったのですか?
引用する
ベストアンサー1
ウェブ上の他の場所で見つけた文書ではなく、ローカル文書を確認してください。対話型シェルセッションで、bash
ドキュメント()の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
末尾を削除することを意味します。タブ、末尾の改行ではない場合。
このシェルはバージョン4.4以降で利用可能ですbash
。mapfile -d
このオプションの紹介は文書化されています。このように:
組み込み関数には、
mapfile
任意-d
の文字をレコード区切り文字として使用するオプションと、提供された区切り文字を-t
削除するオプションがあります-d
。
最後の要素を印刷したときにデータから末尾の改行を削除するには、要素を出力する"${Link[1]%$'\n'}"
ときに使用します。最後の文字が改行文字の場合、要素から最後の改行文字が削除されます。