csh/tcsh中命令输出赋值给变量失败的解决方法咨询
csh/tcsh命令输出含通配符的变量赋值解决办法
问题根源是csh默认会对赋值内容中的通配符(比如输出里的*)做路径展开,把原本的字符替换成当前目录的文件列表,导致直接用set aaa = 赋值失败。以下是两种可行的解决方法:
方法一:用双引号包裹命令输出
双引号可以阻止csh展开通配符,具体命令如下:set aaa = "`echo test1 test2 | awk -v col=color 'BEGIN{while((getline<col)>0){color[++i]=$1};}{for(i=1;i<=NF;i++){printf("select \\052/%s ; color %s ; ",i,color[i])}}'`"方法二:临时禁用通配符展开
先开启noglob选项关闭通配符展开逻辑,完成赋值后再恢复默认设置:set noglob set aaa = `echo test1 test2 | awk -v col=color 'BEGIN{while((getline<col)>0){color[++i]=$1};}{for(i=1;i<=NF;i++){printf("select \\052/%s ; color %s ; ",i,color[i])}}'` unset noglob
赋值完成后,可通过echo "$aaa"查看变量内容,确认*未被错误展开。
内容的提问来源于stack exchange,提问作者aroman
相关产品推荐
相关产品推荐

