我有一个脚本将由 Debian Linux 上的 sh 和 bash 执行。
- 当由 调用时
sh
,以下 echo 命令完美运行,并替换\t
为 3 个空格。然而使用时却失败了#!/bin/bash
。
输出#/bin/sh echo "Hello\tworld"
Hello world
- 当由 调用时
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$