Bas*_*ser 14 linux script bash shell
我有有很多的bash脚本echo语句,也是我别名echo到echo -e两个.bash_profile及.bashrc,使新线为语句正常打印一样echo 'Hello\nWorld'的输出应该是
Hello
World
Run Code Online (Sandbox Code Playgroud)
但我得到的输出是
Hello\nWorld
Run Code Online (Sandbox Code Playgroud)
我什至尝试shopt -s expand_aliases在脚本中使用,它没有帮助
我正在运行我的脚本bash /scripts/scriptnm.sh;如果我. /scripts/scriptnm.sh在获得所需的输出时运行它...
Chr*_*sen 20
混合历史echo意味着它的默认操作因外壳而异。POSIX指定echo如果第一个参数是-n或任何参数包含反斜杠,则结果是“实现定义的” 。
printf在行为更明确的情况下使用(作为内置命令或外部命令)更可靠:格式字符串(第一个参数)中支持 C 样式的反斜杠转义和格式说明符。
printf 'foo\nbar\n'
printf '%s\n%s\n' foo bar
Run Code Online (Sandbox Code Playgroud)
您可以控制的反斜杠转义序列扩张的bash的echo内置命令与xpg_echo外壳选项。
将它设置在任何bash脚本的顶部,以echo自动展开反斜杠转义,而不必添加-e到每个 echo 命令。
shopt -s xpg_echo
echo 'foo\nbar'
Run Code Online (Sandbox Code Playgroud)
推荐的做法是printf用于所有新脚本。
printf '%s\n%s\n' "Hello" "World"
printf '%s\n' "Hello\nWorld"
Run Code Online (Sandbox Code Playgroud)
当您使用 时bash myfile.sh,Bash 以“批处理”模式在单独的进程中运行,并且不会读取其配置文件或 rcfile。
当您使用. myfile.sh,该文件来源由当前shell进程(好像它的内容是由你输入),所以它看到您的当前定义的别名。
一般来说,编写依赖于任何特定 shell 配置的脚本是一个非常糟糕的主意,尤其是别名,除非您在脚本本身中定义它们。(永远不要依赖用户的.bashrc,即使它是你自己的。)
| 归档时间: |
|
| 查看次数: |
43184 次 |
| 最近记录: |