Программная переменная оболочки не будет переходить в операторы if или case - PullRequest
0 голосов
/ 22 мая 2011

Я пробовал как с if-elif-else, так и с case easc. Я не знаю, почему он не принимает условие, когда оно должно быть правдой.

cat temp | (while read line
do
heading=${line%% *}
echo "'$heading'"

case $heading in
'Cell')
echo 'hit cell'
echo $line | awk "{printf '%-20s %15s', $5, `./get.sh $5`}";;
'Frequency')
echo 'hit frequency'
echo $line | awk "{gsub('\)', '', $5);printf '%6s', $5 }";;
'blah')
echo 'hit blah'
echo $line | awk "{gsub('\"', '', $0);printf '%40s', $1 }";;
*) echo 'fail';;
esac

done)

Я не понимаю, почему он не проходит кейс-тест (или вариант if-elif этого). От заголовка эха я получаю именно то, что ожидаю: 'Cell' «Частота» 'Бла'

Это происходит в цикле, и нет пробелов, которые могли бы вызвать сбой теста.

Но он по-прежнему печатает сбои сбои сбои сбои.

Кто-нибудь знает, что может вызвать это странное поведение? Я проверил значения вверх и вниз и не могу найти причину. Помощь будет оценена.

1 Ответ

2 голосов
/ 22 мая 2011

Синтаксическая ошибка: вам не нужны одинарные кавычки:

cat temp | (while read line
do
heading=${line%% *}
echo "'$heading'"

case $heading in
Cell)
echo 'hit cell'
echo $line | awk "{printf '%-20s %15s', $5, `./get.sh $5`}";;
Frequency)
echo 'hit frequency'
echo $line | awk "{gsub('\)', '', $5);printf '%6s', $5 }";;
blah)
echo 'hit blah'
echo $line | awk "{gsub('\"', '', $0);printf '%40s', $1 }";;
*) echo 'fail';;
esac

done)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...