“#”用于评论tcl中的下一行吗?

时间:2016-02-06 02:06:54

标签: bash tcl

在下面的bash脚本中,调用“exec expect”来替换正在运行的bash进程,因此使用tcl / expect再次处理整个脚本。

我想知道第2行“#\”用于什么。

#!/bin/sh
#\
exec expect "$0" "$1"
puts "Hello!"

似乎用来评论tcl中的下一行?下面是这个名为1的脚本的输出。

$ ./1
Hello!

另一个问题是为什么在没有输入参数的情况下脚本中需要1美元?如果从“exec expect”行中删除“$ 1”,则输出为

$ ./1
": no such file or directory

2 个答案:

答案 0 :(得分:2)

我认为通常这个成语是exec expect "$0" "${1+$@}",这是一种奇特的说法,如果有第一个论点,就给出所有的论点。那是为旧贝壳发明的。使用exec expect "$0" "$@",或更简单地

#!/usr/bin/env expect

答案 1 :(得分:2)

  

似乎用于评论tcl中的下一行?

是。 Tcl的反斜杠 - 换行 - 空白处理与注释交互,其中一个后果是您可以使用#\使下一行成为注释。这在实践中是一个边缘案例。

  

另一个问题是,为什么在没有输入参数时脚本中需要$1

没有必要。旧的首选方式是${1+"$@"},而在任何现代shell上它实际上只是"$@"${1+…}是在一个相对常见的商业Unix中解决一个错误)。这有点神奇,但扩展到参数列表作为引用值,以便通过参数传递空格(等)可以工作。

#!/bin/sh
# \
exec expect "$0" "$@"

当然,委托给/usr/bin/env会更好:

#!/usr/bin/env expect

因为很多更简单,并且根本不涉及任何黑客或诡计。