gpt4 book ai didi

bash - 如何在 bash 命令替换中转义单引号字符

转载 作者:行者123 更新时间:2023-11-29 09:12:50 25 4
gpt4 key购买 nike

我想生成一个 SQOOP 命令,它附加了一些变量,如 CUSTOM_PARAMS。我已经在文件中定义了变量:比如 hi.cfg

这个变量有一些单引号和'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 语句:sqoop import blah blah 引用,然后是 $CUSTOM_PARAMS 未引用,后跟一个空字符串 ("")。如果你想在双引号内嵌入双引号,那么你需要使用 \ 来转义它们。

但在我看来你根本不想嵌入双引号。

关于bash - 如何在 bash 命令替换中转义单引号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40573532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com