2011-07-13 3 views
-1

これはかなり陽気に思えるかもしれませんが、なぜこれが起こりましたか?最初の行では、既存のローカルユーザー変数を追加していましたが、2行目で継続プロンプトが表示されています(端末の色が変わっています)。なぜ継続プロンプト?この式を正しく終了させるにはどうしたらいいですか?そして、コマンドの出力に変数をどのように正しく付加しますか? pwd >> $ joeは動作しません。環境変数を追加すると、私は何をしましたか?

rcharette station-2-87 ~ $ joe=$joe\`pwd` 
rcharette station-2-87 ~ $ 
rcharette station-2-87 ~ $ ; 
rcharette station-2-87 ~ $ 
rcharette station-2-87 ~ $ 
rcharette station-2-87 ~ $ ^[ 
-bash: :s^[: substitution failed 
rcharette station-2-87 ~ $ 
rcharette station-2-87 ~ $ exit 
rcharette station-2-87 ~ $ , 
rcharette station-2-87 ~ $ 
rcharette station-2-87 ~ $ 
rcharette station-2-87 ~ $ exit 
rcharette station-2-87 ~ $ ls 
rcharette station-2-87 ~ $ 

答えて

1

エスケープ文字(バックスラッシュ)は、次の文字をリテラルとして解釈させます。したがって、最初の行の\の前にある\は、 '、よく、そしてオープン引用符の代わりにリテラルとして扱われます。したがって、2番目の 'は実際にはオープンクォートであり、それ以降はすべてリテラル文字列として扱われます。

なぜバックスラッシュを追加しましたか?ただそれを削除し、それは動作するはずです。

バリー

3

これは、あなたが匹敵しないバックティックを持っているからです。あなたは最初のものを脱出しているので、それは実際に逆ねった文字列を始める2番目のものです。あなたが最初のバッククォートをエスケープしてきたので、

1
joe=$joe\`pwd` 

は、リテラル名joe\'pwdで変数を探していると見られます。 2番目のバックティックはサブシェルコマンドを開始しますが、それ以上のテキストはありませんので、継続プロンプトが表示されます。あなたは新しい変数にリテラル\を挿入しようとしている場合は、それをエスケープする必要があります:あなたがしようとしている場合は、あなたに

joe=hello/home/users/etc... 

のようなものを与えるだろう

joe=$joe\\`pwd` 

代わりに/を使用してください... UNIXパスはバックスラッシュを使用しません。

関連する問題