Bash如何使用参数展开按制表符分割字符串?
解决bash参数展开替换制表符为换行的问题
你当前的代码存在两个关键问题:
- 变量赋值时,
foo=$'A B'里的分隔符是空格而非制表符,正确的制表符写法应该是$'A\tB' - 参数展开的替换模式里,
'\t'被单引号包裹,bash不会将其解析为制表符,而是当作普通的\t字符串处理
正确的参数展开写法
直接在替换模式中使用未被引号包裹的\t,或者用$'\t'来表示制表符:
foo=$'A\tB' echo "${foo//$'\t'/$'\n'}"
或者更简洁的写法(bash会在参数展开的模式部分解析转义字符):
foo=$'A\tB' echo "${foo//\t/$'\n'}"
执行后就能得到你想要的输出:
A B
替代方案:使用tr命令
如果只是单纯将制表符替换为换行,tr命令会更直观高效,尤其处理文件内容时:
# 处理单个变量 echo "$foo" | tr '\t' '\n' # 直接处理文本文件 tr '\t' '\n' < your_file.txt
内容的提问来源于stack exchange,提问作者user22253670
相关产品推荐
相关产品推荐

