2017-08-02 165 views
1

我正在嘗試在mongoexport中設置一個條件--sort選項,但我遇到了有關我的變量的字符串解釋的問題。 這裏是我試圖運行代碼:向mongoexport添加一個有條件的SORT變量

#!/bin/bash 
if [[ $IS_PROD == "true" ]] 
then 
    SORT='--sort "{_id : -1}"' 
else 
    SORT="" 
fi 

$MONGODB_HOME/bin/mongoexport \ 
--host=$HOST \ 
--port=$PORT \ 
--username=$USER \ 
--password=$PWD \ 
--db=$DB \ 
--limit=$LIMIT \ 
$SORT \ 
--collection=my_collection | \ 
sed 's,\\,\\\\,g' \ 
> $TMP_FILE 

雖然運行此我得到以下錯誤error parsing command line options: invalid argument for flag '--sort' (expected string): invalid syntax

我試過幾個報價配置,仍然不能使它發揮作用。有人能幫我解決這個問題嗎?

由於使用bash陣列

回答

0

#!/bin/bash 
if [[ $IS_PROD == "true" ]] 
then 
    SORT=(--sort "{_id : -1}") 
else 
    SORT=() 
fi 

$MONGODB_HOME/bin/mongoexport \ 
--host=$HOST \ 
--port=$PORT \ 
--username=$USER \ 
--password=$PWD \ 
--db=$DB \ 
--limit=$LIMIT \ 
"${SORT[@]}" \ 
--collection=my_collection | \ 
sed 's,\\,\\\\,g' \ 
> $TMP_FILE 

說明:使用單引號防止殼的膨脹和雙引號是文字,但可變膨脹後的雙引號仍然litteral和擴展字符串由空格分開。

否則以解決未綁定變量的錯誤

#!/bin/bash 

options=(--host=$HOST \ 
--port=$PORT \ 
--username=$USER \ 
--password=$PWD \ 
--db=$DB \ 
--limit=$LIMIT) 
if [[ $IS_PROD == "true" ]] 
then 
    options+=(--sort "{_id : -1}") 
fi 

$MONGODB_HOME/bin/mongoexport \  
"${options[@]}" \ 
--collection=my_collection | \ 
sed 's,\\,\\\\,g' \ 
> $TMP_FILE 
+0

非常感謝您對這個幫助! 但是,對於SORT =()'部分我仍然有問題。 我遇到錯誤'SORT [@]:unbound variable'。有沒有辦法解決這個問題? –

+0

在打電話前似乎是你的bash版本'set + u'中的一個bug,然後'set -u' –

+0

非常感謝你的幫助!效果不錯 –