使用'sh'和'source'(以及'.')执行shell脚本的区别

19 浏览
0 Comments

使用'sh'和'source'(以及'.')执行shell脚本的区别

这个问题已经有了答案:

Echo newline in Bash prints literal \\n

sh和Bash的区别

我有一个小问题。

当我用\'sh\'执行我的shell文件时,它的工作方式不同。

(它打印了“-e”)

谷歌说“检查你的第一行(#!/bin/bash)和\'env | grep sh\'”

但我眼里没有什么不同......

你能告诉我为什么吗?

+++

我尝试将“#/bin/bash”更改为“#/bin/dash”,但没有任何变化。

谢谢阅读..

[我的第一段代码(first.sh)]-bash

#!/bin/bash
echo -e "hi"

[运行脚本和结果]

# . first.sh
Hi
# source first.sh
Hi

# sh first.sh
-e hi

[我的第二段代码(second.sh)]-dash

#!/bin/dash
echo -e "hi"

[运行脚本和结果]

没有变化......

[操作系统]

Ubuntu 18.04

[环境]

# env | grep sh
SHELL=/bin/bash

# ll /bin | grep sh
-rwxr-xr-x  1 root root 1113504  6월  6  2019 bash*
-rwxr-xr-x  1 root root  121432  1월 25  2018 dash*
lrwxrwxrwx  1 root root       4  6월  6  2019 rbash -> bash*
lrwxrwxrwx  1 root root       4  7월 18  2019 sh -> dash*
lrwxrwxrwx  1 root root       4  7월 18  2019 sh.distrib -> dash*

admin 更改状态以发布 2023年5月24日
0
0 Comments

这是因为sh shell解释器不能将-e识别为一个标志,并将其输出为常规字符串。

source.使用您的SHELL环境,即bash,它可以识别-e标志并不将其作为字符串处理。

0