我在运行下面的脚本时遇到了问题(在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本身中键入命令,则会按预期扩展通配符。 但这不是我想要的。 我希望能够提示用户根据需要输入表达式,然后在脚本中执行这些命令。
有什么想法可以做到这一点吗?
非常感谢您的帮助。
答案 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