сохранить подстановочный знак в переменной в скрипте оболочки и оценить / развернуть их во время выполнения - PullRequest
1 голос
/ 29 марта 2011

У меня проблемы с запуском приведенного ниже сценария (обратите внимание, в Cygwin на win 7).Давайте назовем его «myscript.sh». Когда я его запускаю, я ввожу следующее:

yearmonth: 2011-03
daypattern: 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 и т. Д., Скрипт будет работать.Также, конечно, если я наберу команду в самой оболочке, подстановочные знаки будут расширены, как и ожидалось.Но это не то, что я хочу.Я хочу, чтобы ПОМОЩЬ пользователю вводить выражения по мере необходимости, а затем, в сценарии, выполнять эти команды.

Есть идеи, как это возможно?

Вашпомощь очень ценится.

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Попробуйте eval, это должно работать для случаев {a, d} и *

  eval grep --color $q  ${yearmonth}/${daypattern}/${logfilename}
0 голосов
/ 09 марта 2012

Использование кавычек для предотвращения расширения подстановочных знаков:

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