列出具有特定字符的shell变量

时间:2012-11-15 19:19:45

标签: shell variables csh

  

我在c-shell中有一些引用文件名的变量。那些   变量的命名如下:

     

$ T01aa2 $ T12aa2 $ T45aa2等。

     

他们的共同点是“T”和“aa2”。

     

如何在循环中列出这些变量,例如我会这样做   它们是文件名:

     

我想做点什么:

     

foreach ii in($ T * aa2)dosomestuff.sh $ ii end

     

不幸的是,$ T * aa2不适用于c-shell变量名。

     

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

变量名与文件名非常不同。几乎可以肯定,有一种更好的方法可以做你想做的事情。

但是,如果你必须这样做,你可以做的最好的事情是set | grep(或awksed或其他),也许eval。像这样:

set vars=(`set | awk '$1 ~ /^T.*aa2$/ {print $1}'`)
foreach var ( $vars:q ) 
    eval 'dosomestuff "$'"$var"'"'
end

您可以直接从set中获取值并跳过eval,但如果值可能包含空格,则可能会变得棘手。

答案 1 :(得分:0)

不是csh的忠实粉丝,但你是否尝试逃避$ sign? 我的意思是用“\ $”代替“$”?