脚本中的 $_ 变量未按预期工作

$_ variable in script does not work as expected

我有 c shell 脚本来源另一个:

source ./sc1.csh param

获取的脚本执行以下操作:

set scriptName=($_)
if ( "$scriptName" == "" ) then
    set scriptName=[=11=]
    echo "@**E: Please source this script, DO NOT RUN!"
    echo "ERROR"
    exit 1
else
    set scriptName=`basename $scriptName[2]`
endif

我希望 $_ 包含 "source ./sc1.csh param"。然而,它实际上是空的。手动 运行

source ./sc1.csh param

在 shell 中会产生正确的预期行为。 怎么回事?

谢谢。

来自 man csh

$_

Substitutes the command line of the last command executed. (+)

由于脚本还没有执行完毕,所以$_还没有设置。

如果再次调用脚本会发生什么?

好的,正如 user1717259 指出的那样,$_ 替换了最后执行的命令的命令行,因此不适合检查正在调用的脚本中的命令行。相反,使用 $*($argv 的别名)是可行的,因为它包含除 "source" 本身之外的所有命令行。