错误:$ ($) 中的修饰符

Bad : modifier in $ ($)

我写了小脚本,遇到了错误的修改错误。无法弄清楚我在这里缺少什么。 cth_pythonpath 变量存在于环境中并且能够打印变量

#!/bin/csh -f

set script_rootdir = `dirname [=10=]`

set script_abs_rootdir = `realpath $script_rootdir`

setenv PYTHONPATH $CTH_PYTHONPATH:$PYTHONPATH

错误:

Bad : modifier in $ ($).

csh 允许 $varname:x 形式的变量修饰符,其中 x 是一个字母。一些例子是 :e 获取扩展名, :q 引用字符串,以及更多。例如:

> set path = 'file.txt'
> echo $path:e
txt

您 运行 遇到的问题是:

setenv PYTHONPATH $CTH_PYTHONPATH:$PYTHONPATH

相同的语法:$CTH_PYTHONPATH: 结尾,因此它尝试应用 $ 修饰符,但此修饰符不存在,因此您会收到错误消息:

Bad : modifier in $ ($).

解决方法是使用${varname}明确告诉csh变量名何时结束或使用引号:

setenv PYTHONPATH ${CTH_PYTHONPATH}:${PYTHONPATH}
setenv PYTHONPATH "$CTH_PYTHONPATH":"$PYTHONPATH"

我建议顺便引用变量;它将防止空格等问题;我可能会这样写:

setenv PYTHONPATH "${CTH_PYTHONPATH}:${PYTHONPATH}"

注意,如果你能顺便帮忙,我不推荐使用csh;这是一个旧的 shell,有很多问题,包括各种情况下的奇怪错误。请注意您遇到的错误如何不打印行号或者实际上非常有用。