2016-11-13 68 views
4

我想生成一個由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` 

回答

4

改變這一行:

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未加引號, 後跟一個空字符串("")。 如果你想在雙引號內嵌入雙引號, 那麼你需要用\來轉義它們。

但在我看來,你根本不想嵌入雙引號。

+0

非常感謝Janos現在可以運作:) –

相關問題