簡體   English   中英

在Shell腳本中轉​​義某些字符

[英]Escape certain characters in shell script

這是我用來查詢配置單元表的下面的shell腳本,並將此文件保存為test4.sh

#!/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腳本中工作?

在反引號和雙引號內,您基本上需要將反斜杠加倍,是的。 如果反斜杠不是已知的轉義序列,則將保留它。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM