首页 > 解决方案 > 将 tcsh 中的变量设置为包含引号和方括号的值

问题描述

可执行文件需要以下格式的命令行参数:

-varname "[64]"

需要将其包装为环境变量,以便可执行文件可以由另一个工具启动,所以我尝试了:

> setenv PARAM '-varname "[64]"'
> echo $PARAM
echo: No match.

我尝试了各种转义,但找不到如何将原始字符串包含到环境变量中。

必须提及的是,内部可执行文件和包装器的期望都是不灵活的,例如,可执行文件需要如图所示的变量,而包装器需要一个字符串,它通过'setenv'与环境变量相关联。

有什么提示吗?

谢谢!

标签: shellcshtcshsetenv

解决方案


您设置正确,但问题是 shell 如何扩展 $PARAM 的值。

如您所知,命令行中的星号由 shell 扩展为当前目录中的所有文件。

> echo *

shell 扩展的结果随后用作 的参数echo

命令行中允许使用其他通配符/glob 模式。方括号定义字符类。4要回显包含 a或 a 的所有文件6

> echo *[46]*

回显所有精确命名为4 或 6 的文件。

> echo [46]

在上面的例子中,如果没有文件被命名为 4 或 6,那么你会得到echo: No match.

解决方案:使用 printenv
> setenv PARAM '-varname "[64]"'
> printenv PARAM
   -->  -varname "[64]"

请注意PARAM,not$PARAM是 的参数printenv。这样可以避免$PARAM.


推荐阅读