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

标签 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 版本)。从 echo 标题行我得到了我所期望的: '细胞' '频率' '废话'

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

但它仍然打印 fail fail fail fail。

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

最佳答案

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

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)

关于linux - Shell 编程变量不会进入 if 或 case 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6084960/

相关文章:

android - 使用 android adb shell 返回一个 Activity

macos - 跳过存在的文件时复制文件 - Unix

linux - opkg-cl update 2 下载错误

json - 如何解析 JSON 文件并将其转换为 CSV 文件?

linux - 我可以让 FIND_LIBRARY 在我的 *custom* 依赖项构建完成后运行吗?

c - sigaction 如何既是结构又是函数?

linux - cd 命令 : how to go back an unknown number of levels from current subdirectory to a particular parent directory (unix and dos)

linux - linux中如何使用for循环统计并打印出一组单词

Linux Shell 脚本 - 备份/恢复

c - 可以调用二进制文件的 Shell 脚本