shell - 将 tcsh 中的变量设置为包含引号和方括号的值
问题描述
可执行文件需要以下格式的命令行参数:
-varname "[64]"
需要将其包装为环境变量,以便可执行文件可以由另一个工具启动,所以我尝试了:
> setenv PARAM '-varname "[64]"'
> echo $PARAM
echo: No match.
我尝试了各种转义,但找不到如何将原始字符串包含到环境变量中。
必须提及的是,内部可执行文件和包装器的期望都是不灵活的,例如,可执行文件需要如图所示的变量,而包装器需要一个字符串,它通过'setenv'与环境变量相关联。
有什么提示吗?
谢谢!
解决方案
您设置正确,但问题是 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
.
推荐阅读
- reactjs - 如何使用打字稿根据选定的选项卡显示来自对象的相关信息并做出反应?
- c++ - OpenCV 4.3.0 在 GPU 上计算积分图像>
- java - 我应该如何通过使用 Getters 方法从 JSP 调用 javaclass 方法来获取数据?
- azure-ad-b2c - B2C ClaimsTransformation AddItemToStringCollection / StringJoin
- javascript - 如何从 localStorage 中删除项目()?
- java - 在 Quarkus 中使用 @Inject 和接口进行依赖注入
- reactjs - 无法删除材料 ui appBar 中的边距并在单击时更改菜单项的外观
- python - 为什么我在提交烧瓶表单时出错?
- c# - 重命名 DbContext 类失去与现有迁移/模型快照的关联
- kubernetes - 如何在不清除文件夹的情况下挂载包含 ConfigMap 键/值内容的文件?