我使用此bash代码复制文件内容
#!/bin/bash
readarray content < ./test
printf "%s" "${content[@]}"
问题是我得到了我想要的东西,但最后用附加换行符。我该怎样摆脱那个换行符?
答案 0 :(得分:3)
问题由readarray
(/ mapfile
)创建,它为每个数组元素(行)添加一个尾随换行符,你需要告诉它不要做所以使用-t
选项。
readarray -t content < ./test
如果必须使用printf
处理它,请使用参数扩展来删除数组元素中的尾随换行符:
printf '%s' "${foo[@]/$'\n'/}"
示例:强>
$ readarray foo <<<$'foobar\n\nspamegg'
$ printf '%s' "${foo[@]}"
foobar
spamegg
$ printf '%s' "${foo[@]/$'\n'/}"
foobarspamegg
如果只想从数组的最后一个元素中删除尾随换行符,则需要分两步完成。首先打印除最后一个之外的所有数组元素,最后打印删除尾部换行符的最后一个元素:
printf '%s' "${content[@]:0:$((${#content[@]}-1))}"; printf '%s' "${content[${#content[@]}-1]/$'\n'/}"
示例:强>
$ printf '%s' "${foo[@]:0:$((${#foo[@]}-1))}"; printf '%s' "${foo[${#foo[@]}-1]/$'\n'/}"
foobar
spamegg