1

以下のスクリプトの実行に問題があります (win 7 の Cygwin で気をつけてください)。それを「myscript.sh」と呼びましょう。実行すると、次のように入力します。

yearmonth: 2011-03
daypattern: 2{5,6,7}
logfilename: error*
query: 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 OR daypattern=26 などと入力すると、スクリプトは機能します。また、もちろん、シェル自体にコマンドを入力すると、ワイルドカードが期待どおりに展開されます。しかし、これは私が望むものではありません。ユーザーが必要に応じて式を入力するように促し、後でスクリプトでこれらのコマンドを実行できるようにしたいと考えています。

これがどのように可能になるかについてのアイデアはありますか?

あなたの助けに感謝します。

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 に答える