是否有任何标准涵盖在同一行上的变量赋值后运行命令的可移植性?
APPLE="cider" echo hi
Run Code Online (Sandbox Code Playgroud)
这样的东西有多便携?它会在哪里工作,在哪里不会?
另外:如果这有什么不同,我的 shell 脚本以 #!/bin/sh 开头。
只要您使用的是符合 POSIX 标准的 shell,就可以。
来自shell命令语言的POSIX定义:(相关点以粗体显示)
“简单命令”是一系列可选的变量赋值和重定向,以任何顺序,可选地跟随单词和重定向,由控制运算符终止。
当需要执行给定的简单命令时(即当任何条件结构如 AND-OR 列表或 case 语句没有绕过简单命令时),以下扩展、赋值和重定向都应从命令文本的开头到结尾:
根据Shell 语法规则被识别为变量赋值或重定向的单词将被保存以在步骤 3 和 4 中进行处理。
不是变量赋值或重定向的词应该被扩展。如果任何字段在它们的扩展之后仍然存在,则第一个字段应被视为命令名称,其余字段是命令的参数。
应中所描述来执行重定向的重定向。
在分配值之前,每个变量分配都应针对波浪号扩展、参数扩展、命令替换、算术扩展和引号删除进行扩展。
在前面的列表中,为了处理特殊的内置实用程序,步骤 3 和 4 的顺序可以颠倒;请参阅特殊内置实用程序。
如果没有命令名结果,变量赋值将影响当前的执行环境。否则,变量赋值应为命令的执行环境导出,不应影响当前执行环境(特殊内置程序除外)。
另外,是的很#!/bin/sh
重要。从POSIX 定义sh
:
sh 实用程序是一个命令语言解释器,它将执行从命令行字符串、标准输入或指定文件读取的命令。应用程序应确保要执行的命令以外壳命令语言中描述的语言表达。
所以基本上它说sh
必须遵循我们上面介绍的规则。
因此,只要您使用的是符合 POSIX 标准的操作系统,就很好。
归档时间: |
|
查看次数: |
1106 次 |
最近记录: |