到目前为止,我认为外壳中的分号(不知何故)与换行符具有相同的含义。所以我很惊讶对于
alias <name>=<replacement text>; <name>
Run Code Online (Sandbox Code Playgroud)
<name>
是未知的,而在下一行中是已知的。csh
, tcsh
, sh
,ksh
和bash
行为相同。至少对于csh
直接使用别名还是在分号之前获取脚本并不重要 - 别名之后不知道,;
但在下一个命令行中知道。这是一个错误还是这种行为的意图?
sch*_*ily 10
您使用的别名语法不适用于 POSIX shell,对于 POSIX shell,您需要使用:
alias name='replacement'
Run Code Online (Sandbox Code Playgroud)
但是对于所有 shell,这不能工作,因为别名替换是在解析器的早期完成的。
在执行别名设置之前,解析器读取了整行,因此,您的命令行将无法工作。
如果别名出现在下一个命令行中,它将起作用。
这种行为是由 POSIX 在Alias Substitution下设计和指定的。
在 shell 执行令牌识别之后和应用任何语法规则之前,别名被替换。在您调用 alias 时<name>
,该命令alias
未执行。
归档时间: |
|
查看次数: |
359 次 |
最近记录: |