emp1.sh脚本内容
#!/bin/bash
#emp1.sh: interactive version uses read to take input
echo "Enter the pattern to be searched: \c"
read pname
echo "Enter the file to be used: \c"
read flname
echo "searching for the pattern $pname from the file $flname"
grep "$pname" $flname
echo "Selected records are shown above"
Run Code Online (Sandbox Code Playgroud)
为什么输出之间存在差异?
$ sh emp1.sh
Enter the pattern to be searched:
$ ./emp1.sh
Enter the pattern to be searched: \c
Run Code Online (Sandbox Code Playgroud)
事实上有两种不同的外壳。一个是/bin/bash,另一个是/bin/dash。实际上/bin/sh是一个软链接/bin/dash。要验证它,请在终端中写入,
which sh
Run Code Online (Sandbox Code Playgroud)
你会得到输出:/bin/sh
接下来ls -l /bin/sh在终端中输入,这将返回类似的内容,
lrwxrwxrwx 1 root root 4 May 16 20:23 /bin/sh -> dash
Run Code Online (Sandbox Code Playgroud)
这表明它sh是 的软链接/bin/dash。你可以进一步尝试which dash。
实际上bash具有sh更多功能和更好的语法。两者的命令几乎相同,但又有所不同。
这里发生了什么
当您运行时sh emp1.sh,脚本由 处理,dash但是当您运行时,./emp1.sh由于#!/bin/bash脚本 shell 顶部的 shebang line( )bash会处理它。因此,输出的格式略有不同。请记住bash有一些改进的语法。