2016-09-09 2 views
1

新しいユーザーが作成されたときに実行される自動セットアップスクリプトがあります。このコード行を実行してgolang環境を設定します:echo "export PATH="$PATH:$GOPATH/bin"" >> ~/.profileエコーを拡大するエコーを防止できますか?

しかし、これはファイルに書き込む前にすべての環境変数を展開します。環境変数を拡張せずにコマンドラインからexport PATH="$PATH:$GOPATH/bin"をファイルに書き込む方法はありますか?

答えて

4

試してみてください(例えばbashなど)POSIXのようなシェルで

echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.profile 

シングル引用符で囲まれた文字列は、あなたがここに何をしたいですリテラル、としてその内容を扱います。

選択アップフロント変数の参照拡大になり、ここで二重引用符で囲まれた文字列を使用する唯一の理由 - あなたの場合には適用されません。前記

は、ここでの例は次のとおり

$ echo "Honey, I'm \"$USER\" and I'm \$HOME." 
Honey, I'm "jdoe" and I'm $HOME. 

バックスラッシュエスケープは、リテラルとして扱われるべき埋め込み"$インスタンスをエスケープするために使用されます。あなたが試したもののためとして


"export PATH="$PATH:$GOPATH/bin"" 

は実際に3の別個の文字列で構成される文字列concatentation、次のとおりです。

  • "export PATH="、ダブルとしての、引用符で囲まれた文字列はではないには$の-prefixed補間要素は、引用符で囲まれていない列としてだけでなく、拡張変数$PATHとそれぞれの値に$GOPATHを伴う、shell expansions追加の対象であるが、単語分割を適用し、export PATH=
  • $PATH:$GOPATH/bin、リテラルに展開しますパス名拡張(グロビング)。
  • ""であり、これは空の文字列になり、実質的に無視されます。

POSIXのようなシェルを使用して、文字列を配置することにより、より大きな文字列(文字列を連結)を構成することができますどのように注 - 直接互いに隣接から- 引用符で囲まれていないか、単一引用符で囲まれたまたは二重引用符で囲まれています。

+2

Linuxチュートリアルの[chapter](http://www.linuxcommand.org/lc3_lts0080.php)の詳細な例では、問題をよく解説しています。 –

+1

優れた答え、ありがとう! – LuMa

関連する問題