Shell编程变量不会进入if或case语句

时间:2011-05-21 22:57:54

标签: linux shell unix awk case

我尝试过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版本)。从回波标题线我得到的正是我所期望的: '细胞' '频率' '嗒嗒'

这些发生在一个循环中,并且没有可能导致测试失败的空格。

但它仍会打印失败失败失败失败。

有谁知道什么可能导致这种奇怪的行为?我上下检查了值,找不到任何理由。帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

语法错误:您不需要单引号:

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)