【问题标题】:bash and POSIX shell difference in dot commandbash 和 POSIX shell 在点命令中的区别
【发布时间】:2016-10-12 12:03:08
【问题描述】:

我在采购脚本时遇到了问题。
如果有人知道出了什么问题,请分享。
当我运行 script.sh 时,包含:

#!/bin/sh
. preparing_script.sh # contents: func1(){ echo 'It works!' ; }
func1

它什么也不打印。但是当我将脚本更改为以下内容时:

#!/bin/bash
. preparing_script.sh # contents: func1(){ echo 'It works!' ; }
func1

它会打印“它有效!”。
是否打算让原始 shell 不提供源函数? 还是我做错了什么?

【问题讨论】:

  • 神秘,script.sh中的set命令不显示函数func1!?
  • 你的系统中sh是什么shell,是什么系统?

标签: bash shell


【解决方案1】:

函数定义前的function关键字是bash-ism,不是POSIX定义的。

因此,当您使用 sh (shebang #!/bin/sh) 运行它时,它不起作用(将显示 ( 的语法错误),但使用 bash (shebang #!/bin/bash) 可以正常工作。

【讨论】:

  • 其实function来自ksh。
  • ksh 中,使用和不使用关键字定义的函数的行为略有不同;在bash,它只是装饰性的。 (我假设 bash 采用它部分是为了更容易移植 ksh 代码,部分是为了便于阅读。)
  • 关键字“function”不是问题,我磁盘上的原始脚本中缺少它。 function 关键字旨在使这篇文章中关于点命令(posix 源)的事情变得清晰。
  • 对不起,它也适用于我在帖子中输入的内容。我可能在适应过程中遗漏了一些东西。但它是 #!/bin/sh - #!/bin/bash 绝对不同。
  • @user3694243 使. ./preparing_script.sh 工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-13
  • 2017-08-01
  • 2013-08-11
  • 2017-10-04
  • 2012-02-20
  • 2011-11-12
相关资源
最近更新 更多