[英]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.