1

我在运行下面的脚本时遇到了麻烦(在 Win 7 上的 Cygwin 中请注意)。让我们称之为“myscript.sh”当我运行它时,以下是我输入的内容:

年月:2011-03
日模式:2{5,6,7}
日志文件 名:错误*
查询: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}/error* 不存在这样的文件目录。

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

有什么想法怎么可能?

非常感谢您的帮助。

4

2 回答 2

1

试试eval,这应该适用于 {a,d} 和 * 情况

  eval grep --color $q  ${yearmonth}/${daypattern}/${logfilename}
于 2011-03-28T20:39:21.393 回答
0

使用引号防止通配符扩展:

$ a="*.py"
$ echo $a
google.py pair.py recipe-523047-1.py
$ echo "$a"
*.py
于 2012-03-08T20:58:38.313 回答