首页 > 解决方案 > Bad : $ ($) 中的修饰符

问题描述

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

#!/bin/csh -f

set script_rootdir = `dirname $0`

set script_abs_rootdir = `realpath $script_rootdir`

setenv PYTHONPATH $CTH_PYTHONPATH:$PYTHONPATH

错误:

Bad : modifier in $ ($).

标签: linuxcsh

解决方案


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

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

您遇到的问题是:

setenv PYTHONPATH $CTH_PYTHONPATH:$PYTHONPATH

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

Bad : modifier in $ ($).

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

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

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

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

请注意,如果您可以顺便提供帮助,我不建议使用 csh ;这是一个有很多问题的旧外壳,包括各种情况下的奇怪错误。请注意您遇到的错误如何不打印行号或非常有帮助。


推荐阅读