这个命令有什么作用(奇怪的分配和重定向)

juj*_*uju -1 io-redirection shell-script

我想获得有关以下命令正在执行的操作的更多详细信息:

PASSING=0 FAILED=0 > log_${ENV} print "Test Started at `date`\n"
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 6

该命令可以改写为

PASSING=0 FAILED=0 print "Test Started at `date`\n" >log_${ENV}
Run Code Online (Sandbox Code Playgroud)

因为重定向可能发生在命令行的任何位置。

重定向将print命令的输出发送到名为的文件log_${ENV}(或者log_$ENV,这里的大括号不会做任何事情),其中ENV应该是当前环境中存在的具有某些值的 shell 变量。

PASSING和的两个赋值FAILED将在print命令的环境中设置这两个变量。执行此行后它们将不存在(除非它们之前存在于脚本中,在这种情况下,执行此命令行后它们的原始值将保持不变)。

由于print它似乎没有使用这两个变量(除非它是一个脚本或函数或其他我们不知道的东西),因此很难说这些变量的意图是什么。

print事物将文本字符串作为其唯一参数,其中字符串的一部分是旧式命令替换,它将dateprint调用之前扩展为命令的输出。使用更现代的命令替换语法,参数也可以写成"Test Started at $(date)\n".

整体效果可能(取决于什么print)是将给定的文本字符串写入特定文件,其名称取决于 value $ENV

有关的:


In ksh93(和zsh),print是一个 shell 内置实用程序,其行为(粗略地说)有点像echo. 该 shell 还$ENV以一种特殊的方式处理,因为它将$ENV在启动交互式 shell 时获取指向的文件。不建议将它(或一般大写变量)用作 shell 脚本中的通用变量。

与此相关: