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
有一些改进的语法。