将wild-card保存在shell脚本中的变量中,并在运行时评估/展开它们

时间:2011-03-28 20:35:05

标签: linux shell wildcard expansion

我在运行下面的脚本时遇到了问题(在wing 7的Cygwin中)。 让我们称之为“myscript.sh” 当我运行它时,我输入以下内容:

yearmonth:2011-03
daypattern: 2 {5,6,7}
logfilename:错误*
查询:WARN

#! /bin/bash
yearmonth=''
daypattern=''
logfilename=''
sPath=''
q=''

echo -n "yearmonth: "
read yearmonth

echo -n "daypattern: "
read daypattern

echo -n "logfilename: "
read logfilename

echo -n "query: "
read q

cat "$yearmonth/$daypattern/$logfilename" | grep --color $q

我得到的输出是:

  

cat:/ 2011-03 / 2 {5,6,7} /错误*没有这样的   文件目录存在。

但是,如果我输入daypattern = 25或daypattern = 26等,则脚本将起作用。 此外,当然如果我在shell本身中键入命令,则会按预期扩展通配符。 但这不是我想要的。 我希望能够提示用户根据需要输入表达式,然后在脚本中执行这些命令。

有什么想法可以做到这一点吗?

非常感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

试试eval,这适用于{a,d}和*个案

  eval grep --color $q  ${yearmonth}/${daypattern}/${logfilename}

答案 1 :(得分:0)

使用quote来阻止通配符扩展:

$ a="*.py"
$ echo $a
google.py pair.py recipe-523047-1.py
$ echo "$a"
*.py