tcsh中如何通过setenv设置包含引号、方括号的环境变量
问题根因
你遇到的No match报错并非环境变量赋值失败,而是csh/tcsh shell的默认特性导致:shell解析$PARAM变量展开时,会将字符串内的[64]识别为文件通配符,尝试匹配本地文件名是6或4的文件,匹配不到就抛出该错误。你写的setenv PARAM '-varname "[64]"'赋值逻辑本身完全正确,环境变量已经存储了预期的字符串内容。
验证方法
执行以下命令即可验证变量已正确赋值:
# 临时关闭shell通配符匹配功能 set noglob # 此时echo会正常输出预期的-varname "[64]" echo $PARAM # 验证完成后可恢复通配符功能 unset noglob
调用方案
该方案完全符合你提到的两端参数不可修改的限制,不需要调整参数格式,仅需要在调用目标可执行程序时,用双引号包裹环境变量即可避免通配符解析,程序收到的参数会完全符合要求:
# 直接调用可执行程序的写法 your_target_exec "$PARAM"
如果外层封装工具基于csh/tcsh实现,只需要在工具内部调用可执行程序的逻辑中,给$PARAM加上双引号包裹即可;如果封装工具本身基于bash等其他shell实现,无需额外处理,其他shell默认不会对双引号包裹的变量内的方括号做通配符匹配,直接传递即可正常使用。
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

