如何以独立于 shell 的方式将字符串中的“\t”替换为制表符?

如何以独立于 shell 的方式将字符串中的“\t”替换为制表符?

我有一个脚本将由 Debian Linux 上的 sh 和 bash 执行。

  1. 当由 调用时sh,以下 echo 命令完美运行,并替换\t为 3 个空格。然而使用时却失败了#!/bin/bash
    #/bin/sh
    echo "Hello\tworld"
    
    输出
    Hello   world
    
  2. 当由 调用时bash,以下 echo 命令完美运行,并替换\t为 3 个空格。但是,当使用 运行时它会失败 #/bin/sh
    #/bin/bash
    echo -e "Hello\tworld"
    
    输出
    Hello   world
    

有什么方法可以用同一行命令替换 \tsh或 bash 吗?

答案1

假设选项卡位于文字中而不是变量中

printf 'Hello\tworld\n'

如果字符串位于变量中,则最好避免将变量作为 的第一个参数printf,因为这样您将需要转义变量中的任何百分号 ( %) 或反斜杠 ( )。\最好的方法是用作%b格式说明符printf(感谢@Stéphane Chazelas)

$ a='hello\tworld'
$ printf "%b\n" "$a"
hello   world
$ printf "%b\n" "$a" | cat -A
hello^Iworld$

相关内容