我怎样才能逃避;、()或""中的回声?我想回应这个命令
"LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"但是它说,syntax error near unexpected token}‘’甚至我也用转义单引号改变了命令,如下所示
'LOAD DATA INPATH '"'"$i"'"' INTO TABLE transient.url_log_201803 partition (ds='"'"$TGLS"'"', periode='"'"$WKTS"'"');'我不知道如何将这个命令回音到终端或文件中。我也试着用\来逃避
发布于 2018-04-06 18:52:29
如果您试图阻止变量展开,则需要使用$转义\。由于变量是单引号,似乎没有必要使用单引号,但是单引号周围的双引号会导致单引号按字面解释:
$ echo "LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"
LOAD DATA INPATH '' INTO TABLE transient.url_log_201803 partition (ds='', periode='');转义变量:
$ echo "LOAD DATA INPATH '\$i' INTO TABLE transient.url_log_201803 partition (ds='\$TGLS', periode='\$WKTS');"
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');如果你的目的是保持双引号围绕着整件事:
$ echo "\"LOAD DATA INPATH '\$i' INTO TABLE transient.url_log_201803 partition (ds='\$TGLS', periode='\$WKTS');\""
"LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 partition (ds='$TGLS', periode='$WKTS');"发布于 2018-04-06 19:40:21
不要试图对复杂的数据使用echo。
以下内容使用了这里的文档:
cat <如果您需要将其传输到诸如mysql这样的命令(这是一个Hive命令,但我不知道通常如何调用Hive客户机,所以我在示例中使用了mysql ):
cat <如果您需要在不展开变量的情况下传递它:
cat <<'END_SQL' | mysql
LOAD DATA INPATH '$i' INTO TABLE transient.url_log_201803 PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL使用这里的文档还允许您编写更易读的代码(更短的行):
cat <<'END_SQL' | mysql
LOAD DATA INPATH '$i'
INTO TABLE transient.url_log_201803
PARTITION (ds='$TGLS', periode='$WKTS');
END_SQL注意,文档内容和(更重要的是)结束标记(上面的END_SQL)不应该缩进:
for ...some loop range...; do
cat <如果end标记是缩进的,shell将找不到它,您将收到一条关于这里的文档在文件结束时被终止的错误消息。
发布于 2018-04-06 18:44:50
您不需要用echo来转义父母或分号:
$ echo "Semicolons look like ';'. Parens look like '(' and ')'."
Semicolons look like ';'. Parens look like '(' and ')'.https://unix.stackexchange.com/questions/436045
复制相似问题