2017-03-01 36 views
0

我儘可能簡化了這種情況。我試圖讓第二個版本能夠正確使用引號。第一個按預期工作。不幸的是,我無法改變第二種方式如何被調用。然而,我能夠改變REALTEST的價值。無論我嘗試引用,我都無法讓第二個接受間隔字符串。如何將封裝變量傳遞到新環境中

這就是我要做的:

#!/bin/bash -x 
env -i TESTVAR="some spaced string" /bin/bash -l -c "echo \$TESTVAR" 

REALTEST=TESTVAR="some spaced string" 
env -i $REALTEST /bin/bash -l -c "echo \$TESTVAR" 

這裏是我的輸出:

-bash-4.2$ ./test.sh 
+ env -i 'TESTVAR=some spaced string' /bin/bash -l -c 'echo $TESTVAR' 
some spaced string 
+ REALTEST='TESTVAR=some spaced string' 
+ env -i TESTVAR=some spaced string /bin/bash -l -c 'echo $TESTVAR' 
env: spaced: No such file or directory 

什麼方法,我可以解決這個任何想法或者這只是平出不可能?

回答

0

雙引號插入,而單引號不插入。

這是什麼意思?運行以下三行一個接一個,看看自己:

life='meaning'; echo $life 
life='meaning'; echo '$life' 
life='meaning'; echo "$life" 
  • 第一個將呼應:意爲
  • 第二個會響應:$生活
  • 第三回音必:意爲

有些人把所有的東西都加上了雙引號,只是可以肯定。我是那些不喜歡這樣做的人之一。對於非內插字符串使用單引號,對於double使用單引號。

+0

我簡化了我的問題。我在這裏發佈了一個新的:http://stackoverflow.com/questions/42557008/encapsulating-strings-of-variables-in-bash – DrMilk

0
env -i "$REALTEST" /bin/bash -l -c "echo \$TESTVAR" 

您需要雙引號變量或否則bash會將其拆分。

相關問題