2017-03-01 10 views
0

できるだけこのシナリオを簡略化しました。私は適切なエスケープされた引用符で動作するように2番目のバージョンを取得しようとしています。最初は期待どおりに動作します。残念ながら、私は秒を呼び出す方法を変更することはできません。しかし私はREALTESTの価値を変えることができます。クォートで何を試しても、2番目の文字列にスペース文字列を受け入れることができません。カプセル化された変数を新しい環境に渡す方法

これは私が何をしようとしていますものです:ここでは

#!/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

二重引用符は補完しますが、一重引用符は補完しません。

これはどういう意味ですか?あなた自身のために次の3行を一つずつ実行し、参照してください。

life='meaning'; echo $life 
life='meaning'; echo '$life' 
life='meaning'; echo "$life" 
  • 最初はエコーされます:
  • 秒を意味エコーします:$寿命
  • 3分の1がエコーされます:意味

一部の人は、すべてを二重引用符で囲みます。私はそうしたくない人の一人です。補間されていない文字列にはシングルクォーテーションを使用し、にはダブルを使用します。

+0

私は単純に質問を簡略化しました。私はここに新しいものを投稿しました:http://stackoverflow.com/questions/42557008/encapsulating-strings-of-variables-in-bash – DrMilk

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

変数を二重引用符で囲む必要があります。そうしないと、bashは分割します。

関連する問題