2012-08-14 62 views
0

这是我使用的查询蜂巢表我下面的shell脚本,我保存这个文件作为test4.sh逃生的shell脚本某些字符

#!/bin/bash 

DATE_YEST_FORMAT1=`perl -e 'use POSIX qw(strftime); print strftime "%Y-%m-%d",localtime(time()- 3600*96);'` 
echo $DATE_YEST_FORMAT1 

QUERY1=`hive -e " 
set mapred.job.queue.name=hdmi-technology; 
SELECT split(ckey, '\\|') AS t1 
        ,created_time 
       FROM (
        SELECT CONCAT (
          buyer_id 
          ,'|' 
          ,item_id 
          ) AS ckey 
         ,created_time 
        FROM dw_checkout_trans 
        WHERE to_date(from_unixtime(cast(UNIX_TIMESTAMP(created_time) AS BIGINT))) = '$DATE_YEST_FORMAT1' distribute BY ckey sort BY ckey 
         ,created_time DESC 
        ) a 
       WHERE rank(ckey) < 1;"` 

问题陈述: -

我运行上面的shell脚本原样

bash -x test4.sh 

如果你在上面hive sql query看到这一行:

**SELECT split(ckey, '\\|') AS t1**. 

是否需要转义斜杠符号才能使其在shell脚本中工作?

回答

1

里面的反引号和双引号,你基本上需要加倍你的反斜杠,是的。但是,如果反斜杠不是已知的转义序列,它将被保留。

bash$ echo "foo\bar" 
foo\bar 

bash$ echo "foo\\bar" 
foo\bar 

bash$ echo "split(ckey, '\\|')" 
split(ckey, '\|') 

所以,如果你想hive看到一个双反斜线那里,你将需要把四个反斜杠在bash脚本。

另见例如http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_03_03.html