当前位置:  技术问答>linux和unix

shell script脚本不同执行方式结果不同,求教

    来源: 互联网  发布时间:2017-03-26

    本文导语:  脚本内容如下: echo "$PATHn" echo "I love U." echo "I Miss U" 第一种执行方式及结果: root@sophie:/usr/bin# lily.sh /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binn I love U. I Miss U 第二种执行方式及结果: root@sophie:/usr/bin# ...

脚本内容如下:
echo "$PATHn"
echo "I love U."
echo "I Miss U"

第一种执行方式及结果:
root@sophie:/usr/bin# lily.sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/binn
I love U.
I Miss U

第二种执行方式及结果:
root@sophie:/usr/bin# sh lily.sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

I love U.
I Miss U


求大鸟解答。

|
其实答案也很简单, 就是不同shell的echo实现不一样 (注意 这里的 echo 是内置命令)

$sh
$echo "testn"
test

$bash
$ echo "testn"
testn
$

man page 清楚的写明了echo的用法不同

$man sh
DASH(1)                                       BSD General Commands Manual                                      DASH(1)

NAME
     dash — command interpreter (shell)

...
     echo [-n] args...
            Print the arguments on the standard output, separated by spaces.  Unless the -n option is present, a new‐
            line is output following the arguments.

            If any of the following sequences of characters is encountered during output, the sequence is not output.
            Instead, the specified action is performed:

            b      A backspace character is output.

            c      Subsequent output is suppressed.  This is normally used at the end of the last argument to sup‐
                    press the trailing newline that echo would otherwise output.

            f      Output a form feed.

            n      Output a newline character.

            r      Output a carriage return.

            t      Output a (horizontal) tab character.

            v      Output a vertical tab.

            digits
                    Output the character whose value is given by zero to three octal digits.  If there are zero dig‐
                    its, a nul character is output.

            \      Output a backslash.

            All other backslash sequences elicit undefined behaviour.

同样的对于bash

$man bash
BASH(1)                                                                                                        BASH(1)

NAME
       bash - GNU Bourne-Again SHell

...
       echo [-neE] [arg ...]
              Output  the  args, separated by spaces, followed by a newline.  The return status is always 0.  If -n is
              specified, the trailing newline is suppressed.  If the -e option is given, interpretation of the follow‐
              ing  backslash-escaped characters is enabled.  The -E option disables the interpretation of these escape
              characters, even on systems where they are interpreted by default.  The xpg_echo  shell  option  may  be
              used to dynamically determine whether or not echo expands these escape characters by default.  echo does
              not interpret -- to mean the end of options.  echo interprets the following escape sequences:
              a     alert (bell)
              b     backspace
              c     suppress further output
              e
              E     an escape character
              f     form feed
              n     new line
              r     carriage return
              t     horizontal tab
              v     vertical tab
              \     backslash
              nnn  the eight-bit character whose value is the octal value nnn (zero to three octal digits)
              xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
              uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four  hex
                     digits)
              UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight
                     hex digits)

如果不使用内置命令,那么你就可以看到同样的输出
$which echo
/bin/echo
$sh
$/bin/echo "testn"
testn
$bash
$/bin/echo "testn"
testn
$

此处echo 为linux coreutils 的实现

|
echo 和 echo -e 的区别?

|
估计你用sh lily.sh调的话是直接用sh解析的。用lily.sh直接运行的话,调的是/bin/bash
应该是这个差别导致的。你可以在脚本第一行加一句:echo $BASH确认一下。
你可以分别试用如下方法调用看区别:
sh lily.sh
./lily.sh
bash ./lily.sh
我记得在一本书里看过,说是直接用sh调用不建议。另外,脚本开头一般要明确指定用哪个shell调用,你可以在脚本第一行分别加如下语句看看区别:
#!/bin/bash
#!/bin/sh

    
 
 

您可能感兴趣的文章:

  • 求教求教,shell问题...各位大哥,帮忙下
  • 求教了。。远程调研shell,用什么好啊?
  • 求教 Shell 初级问题
  • 求教高手,关于shell命令
  • 求教linux shell编程问题
  • shell脚本调试问题求教
  • shell编程中,求教,查找子字符串位置的问题
  • 求教关于SHELL设置的问题
  • 求教:shell 脚本里如何 执行二级命令啊
  • 求教shell脚本如何能代入参数?
  • 求教,如何调用shell命令!!!
  • 求教一个shell编程问题!
  • C调用shell脚本出现问题,在线等待求教高手
  • shell问题!求教!
  • 求教:shell 脚本怎么获取ORACLE存储过程的返回值?
  • 求教一个非常简单的关于shell脚本调用的问题
  • 这个shell小程序有两处看不懂,求教高手!
  • shell 菜鸟脚本求教
  • 求教一个shell脚本,字符串提取问题。
  • 求教shell学习中的一些疑惑
  • shell脚本如何调用另外一个shell脚本的函数?
  • 急救!关于Shell脚本删除过期文件的问题,Shell脚本达人乱入
  • shell 脚本中命令别名在脚本外无法使用
  • 傻瓜问题,请问shell编程和shell脚本编程的关系
  • C语言调用shell脚本后,通过何种方法能获取脚本中变量的值
  • 想用shell脚本定时执行另一个脚本
  • 一个shell执行另一个带参数shell脚本????????????
  • 如何给shell脚本加密,脚本中有密码。最好是比较直接的,不要说让用 shc
  • Shell脚本调用Sql脚本并向其中传递变量
  • 请问,Shell中如何执行另外一个Shell脚本?
  • 如何传递参数给linux shell 脚本(当脚本从标准输入而不是从文件获取时)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • shell 编程 执行shell新建多个终端 并执行程序
  • 在B shell里怎麽执行曾经执行过的命令
  • 我在执行shell时,想在shell里直接向mysql数据库插入数据,我该如何写shell。
  • 如何在一台机器上的shell中执行另外一台机器上的shell
  • shell文件中执行命令和在提示符下执行有什么区别
  • shell 脚本 date 手动执行 和 放在init.d中自动执行的时间不一样
  • thttpd服务器,执行shell和c语言cgi成功,执行ssi指令不成功
  • 怎么写一个Shell来执行这样的功能,访问Oracle数据库,然后执行一个SQL脚本,生成一个文件。急!
  • 调用system函数执行更改MAC地址异常退出,上面的设置命令直接在shell终端中或在单独的shell脚本中能正常执行
  • 如何编写Shell,当SQL执行完毕后,继续调用Shell命令。
  • 很菜的问题——Linux(RedHat8)下的齿轮图标程序如何执行,是什么shell命令可以执行它?
  • 请问shell中执行一个命令后,如何不回显其执行结果。
  • 我用GCC生成的可执行文件无法直接在shell命令行下执行,这是为什么?可以用调试器调入执行。我用Red Hat7.0
  • 内核执行shell命令问题
  • 在shell命令行中敲一个可执行文件,起一个进程pc,这个进程属于shell进程
  • 请教shell脚本中, 如何保证一行执行成功之后,再执行下一行?
  • linux下shell执行命令后,为何停留在当前目录下?
  • 如何在C中既能读取到shell的执行结果,又能在必要时kill掉shell的进程
  • linux~shell编程~请教一个关于如何执行脚本的问题
  • SHELL脚本如何单击自动执行
  • Centos6下安装Shell下文件上传下载rz,sz命令
  • 不同类型的shell*(K SHELL , C SHELL) 用命令怎么切换?
  • linux bash shell命令:grep文本搜索工具简介
  • 菜鸟问问题:shell是什么呢?普通的ls、cp、pwd这些命令算不算shell呢?如何把自己写的文件变成shell呢?
  • linux bash shell命令:文本搜索工具grep中用于egrep和 grep -E的元字符扩展集
  • shell变量和子shell的问题请教
  • linux bash shell命令:文本搜索工具Grep命令选项及实例
  • 请问“当前shell”和“子shell”的区别?
  • linux bash shell命令:文本搜索工具grep正则表达式元字符集(基本集)
  • 怎么知道当前是B_SHELL 还是C_SHELL


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3