bash脚本 - case语句没有正确评估字符串(值)

时间:2018-01-26 21:03:10

标签: bash shell unix case

我需要帮助弄清楚为什么我的case语句没有正确评估我的列表中的前2个值(visitor_id,更新)。 这是代码:

#!/usr/local/bin/bash
file="mydatasample.out";
linecount=$(wc -l <"$file" | awk '{ print $1 }')
counter=1
while IFS='' read -r column; do
  case column in
    visitor_id)
       echo "isnull($column|| '[|]' ||";;
       updated)
       echo "isnull($column::text || '[|]' ||";;
             *)
       echo "isnull($column::text,'[null!]') || '[|]' ||";;
  esac
  if [ "$counter" -eq "$linecount" ]; then
      echo "isnull($column::text,'[null!]')) as md5sum"
  fi
  ((counter++))
done <"$file"

=mydatasample.out=

visitor_id
updated
visitor_1_key
visitor_1_value
visitor_2_key
visitor_2_value

获得:

isnull(visitor_id::text,'[null!]') || '[|]' ||
isnull(updated::text,'[null!]') || '[|]' ||
isnull(visitor_1_key::text,'[null!]') || '[|]' ||
isnull(visitor_1_value::text,'[null!]') || '[|]' ||
isnull(visitor_2_key::text,'[null!]') || '[|]' ||
isnull(visitor_2_value::text,'[null!]')) as md5sum

期待:

isnull(visitor_id|| '[|]' ||
isnull(updated::::text || '[|]' ||
isnull(visitor_1_key::text,'[null!]') || '[|]' ||
isnull(visitor_1_value::text,'[null!]') || '[|]' ||
isnull(visitor_2_key::text,'[null!]') || '[|]' ||
isnull(visitor_2_value::text,'[null!]')) as md5sum

所以,它是我要评估的第一个(2)值,但到目前为止还不能。谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

case不同,

for并不将column解释为$column(因为for需要知道要分配的变量的名称to,虽然case需要知道比较它的值。)

你可能想要

case "$column" in