如何在bash命令替换中转义单引号字符
问题描述:
我想生成一个由CUSTOM_PARAMS
等变量附加的SQOOP命令。 我已经在一个文件中定义了变量:说hi.cfg
如何在bash命令替换中转义单引号字符
该变量也有一些单引号以及'orc'。
cat hi.cfg CUSTOM_PARAMS="--query select * from blah..blah where \$CONDITIONS --split-by blah --create-hcatalog-table --hcatalog-external-table --hcatalog-storage-stanza stored as 'orc' --compress --compression-codec 'snappy' --fields-terminated-by '|' -m 5 --target-dir /any/dir"
当我源头上命令提示符下文件,但呼应它给了我到底什么写在那里看起来是正确的。
source hi.cfg echo "$CUSTOM_PARAMS" --query select * from blah..blah where $CONDITIONS --split-by blah --create-hcatalog-table --hcatalog-external-table --hcatalog-storage-stanza stored as 'orc' --compress --compression-codec 'snappy' --fields-terminated-by '|' -m 5 --target-dir /any/dir
但是,当我把这种从下面shell脚本:
cat hi.sh echo "Generating Sqoop Command" source $HOME/hi.cfg echo "${CUSTOM_PARAMS}" SQOOP_COMMAND="SQOOP statement : sqoop import blah blah "$CUSTOM_PARAMS"" echo $SQOOP_COMMAND
的*在变量字符被当作命令:
sh hi.sh Generating Sqoop Command --query select * from blah..blah where $CONDITIONS --split-by blah --create-hcatalog-table --hcatalog-external-table --hcatalog-storage-stanza stored as 'orc' --compress --compression-codec 'snappy' --fields-terminated-by '|' -m 5 --target-dir /any/dir SQOOP statement : sqoop import blah blah --query select 0 00 000000_0 000073_0 000103_0 02 09.txt 1 from blah..blah where $CONDITIONS --split-by blah --create-hcatalog-table --hcatalog-external-table --hcatalog-storage-stanza stored as 'orc' --compress --compression-codec 'snappy' --fields-terminated-by '|' -m 5 --target-dir /any/dir
我需要稍后在脚本中运行SQOOP语句,并尝试了几个选项,但没有帮助。 我也试过\*
但没有帮助,它输出:
Generating Sqoop Command --query select \* from blah..blah where $CONDITIONS --split-by blah --create-hcatalog-table --hcatalog-external-table --hcatalog-storage-stanza stored as 'orc' --compress --compression-codec 'snappy' --fields-terminated-by '|' -m 5 --target-dir /any/dir SQOOP statement : sqoop import blah blah --query select \* from blah..blah where $CONDITIONS --split-by blah --create-hcatalog-table --hcatalog-external-table --hcatalog-storage-stanza stored as 'orc' --compress --compression-codec 'snappy' --fields-terminated-by '|' -m 5 --target-dir /any/dir`
答
改变这一行:
SQOOP_COMMAND="SQOOP statement : sqoop import blah blah "$CUSTOM_PARAMS""
要这样:
SQOOP_COMMAND="SQOOP statement : sqoop import blah blah $CUSTOM_PARAMS"
也会改变该行:
echo $SQOOP_COMMAND
要这样:
echo "$SQOOP_COMMAND"
或者,如果你要嵌入额外的双引号,那么这样:
SQOOP_COMMAND="SQOOP statement : sqoop import blah blah \"$CUSTOM_PARAMS\""
发生了什么事是你写它的方式, 第一次嵌入双引号封闭引用的快报离子。 实际上你在那里有SQOOP statement : sqoop import blah blah
引用,其次是$CUSTOM_PARAMS
未加引号, 后跟一个空字符串(""
)。 如果你想在双引号内嵌入双引号, 那么你需要用\
来转义它们。
但在我看来,你根本不想嵌入双引号。
非常感谢Janos现在可以运作:) –