我有一个c shell脚本可以提供另一个资源:
source ./sc1.csh param
源脚本执行以下操作:
set scriptName=($_)
if ( "$scriptName" == "" ) then
set scriptName=$0
echo "@**E: Please source this script, DO NOT RUN!"
echo "ERROR"
exit 1
else
set scriptName=`basename $scriptName[2]`
endif
我希望$ _包含“源./sc1.csh参数”。但是,它实际上是空的。手动运行
source ./sc1.csh param
外壳程序中的会导致正确的预期行为。 发生了什么事?
谢谢。
答案 0 :(得分:1)
来自man csh
$_
Substitutes the command line of the last command executed. (+)
由于脚本尚未完成执行,因此尚未设置$ _。
如果再次调用该脚本会怎样?
答案 1 :(得分:1)
好吧,正如user1717259指出的那样,$ _替换了最后执行的命令的命令行,因此使其不适用于检查正在调用的脚本中的命令行。而是使用$ *($ argv的别名)有效,因为它包含除“源”本身以外的所有命令行。