qin*_*eng 16 command-line bash scripts
如果我echo -e "\e[1;31mThis is red text\e[0m"在命令行中运行,它会打印出红色文本。
但是,如果我使用将其写入脚本文件中 test.sh
#! /bin/bash
echo -e "\e[1;31mThis is red text\e[0m"
Run Code Online (Sandbox Code Playgroud)
跑 $ sh test.sh
它打印出来
-e \e[1;31mThis is red text\e[0m
为什么他们的行为不同?
Flo*_*sch 30
echo是 Bash 和 dash ( /bin/sh) 中内置的 shell 。如果您从命令行运行echo,您使用的是 Bash 内置程序,如果sh您正在使用 Dash 内置程序运行您的 shell 脚本。
的破折号版本echo不知道-e选项,但只是逐字输出任何内容,而不对\序列进行任何特殊处理。
要么使用 Bash 运行你的 shell 脚本,要么使用/bin/echo代替echo:
/bin/echo -e "\e[1;31mThis is red text\e[0m"
Run Code Online (Sandbox Code Playgroud)
为避免不同版本的问题,echo您可能需要printf改用。与echo printf始终解释\序列但不会在末尾自动添加换行符相反,\n如果需要,则必须在末尾附加。
由于某些版本printf不明白,\e您应该\033改用:
printf "\033[1;31mThis is red text\033[0m\n"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72319 次 |
| 最近记录: |