unixの初心者です、以下のecho -eの¥がどう機能するか?
混乱して困っています。
3と4が同じになるのに、5と6が異なるのはなぜなんでしょう?
そもそも¥て何をするものなんでしょうか?-eと¥がくっつくと
やたら難しくなって困っています。
1, echo -e "hello\tthere" → hello there
2, echo -e hello\tthere hellotthere
3, echo -e "hello\\tthere" hello there
4, echo -e hello\\tthere hello there
5, echo -e "hello\\\tthere" hello\there
6, echo -e hello\\\tthere hello there
よろしくお教えください。
No.2ベストアンサー
- 回答日時:
「よろしくお教えください。
」という件について、個別に回答していませんでしたので、追記しました。なお、下記の件はすべて 回答No.1 の参照サイトに書いてあります。
よく読んでみてください。
1. helloとthereを水平タブで区切って表示したい。
この記述例だけが正解です。
2. スクリプト記述ミスなので論外です。
シェルプログラムは無効なバックスラッシュを無視したので、保証できない結果が表示されている。
3. スクリプト記述ミスをシェルプログラムが救済した。
最初のバックスラッシュを無効として、それ以外は救済した。
4. (3)と同じように、スクリプト記述ミスをシェルプログラムが救済した。
5. 結果は hello\tthere と合計12文字になるはずなので、質問者はタイプミス(11文字)していると思われる。
シェルプログラムはスクリプト記述通りに正しく判定し、バックスラッシュを1文字表示した。
つまり、バックスラッシュを3つ続けて記述しているので、「両側のバックスラッシュで囲んだメタ文字を表示しなさい」という指定になり、結果表示は2番目のバックスラッシュが1文字だけ表示される。
後ろに続いている文字は、単なる文字列( tthere という6文字の文字列)として表示されている。
ーーー以上です。
No.4
- 回答日時:
シェルの構文解析時に解釈される\と、echoコマンド処理時に解釈される\があるのに注意ですかね。
\自体は同じですが、構文解析時に消費(?)されてコマンド処理に渡らないものと、構文解析を通り抜けてコマンドに渡るもの。bashの構文解析時の\文字処理は以下の通りです。
(1) " " の中
\\ は \ に、\" は " に、それ以外の文字 c について \c は \c のまま。
(2) ' ' の中
\ はそのまま。
(3) " " や ' ' の外
\\ は \ に、それ以外の文字 c について \c は c に。c が空白文字でもパラメータ区切りにはならない。あと、行末の \ は行の連結に。
以上を適用すると、
>1, echo -e "hello\tthere" → hello there
echo に渡るのは hello\tthere で、\t をecho -eがタブにする
>2, echo -e hello\tthere hellotthere
echo に渡るのは hellotthere で、echo -e はそのまま出す
>3, echo -e "hello\\tthere" hello there
echo に渡るのは hello\tthere で、\t をecho -eがタブにする
>4, echo -e hello\\tthere hello there
echo に渡るのは、hello\tthere で、\t をecho -eがタブにする
>5, echo -e "hello\\\tthere" hello\there
echo に渡るのは、hello\\tthere で、\\ をecho -eが\にする
>6, echo -e hello\\\tthere hello there
echo に渡るのは、hello\tthere で、\t をecho -eがタブにする
動作が書いた人の意図通りであるかどうかをさておくと、すべて正しい記述です。
No.3
- 回答日時:
6. について書き忘れていました。
6. スクリプト記述ミスをシェルプログラムが救済した。
-e 指定があるのでシェルプログラムはエスケープシーケンスを優先した。
(最初の2文字のバックスラッシュは無効として、エスケープシーケンスを採用した)
5. と 6. の違いについては、つぎのようになります。
5. は正しいスクリプト記述ー>正しく処理実行ー>正しい結果表示(指示通りの結果表示)。
6. は正しくないスクリプト記述ー>誤りを救済して実行ー>救済結果を表示。
---以上です。
No.1
- 回答日時:
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby プログラミング 3 2023/06/09 14:30
- 英語 "Hello" の語源は何でしょうか?中国語の「好」Hǎo ではないでしょうか? 2 2022/04/01 10:23
- 英語 和訳お願いします 3 2022/10/09 07:13
- CM ANAのCMのナレーションがどなたなのか知りたいです。 1 2023/01/18 16:54
- その他(学校・勉強) Japanese schools tests 1 2022/08/19 14:41
- 中学校受験 Japanese schools 1 2022/08/22 15:53
- Java マイクラでPythonのプログラミングができません 3 2023/05/28 07:15
- JavaScript ifreamをリロードしたい 1 2022/05/03 16:15
- 英語 Hello and please don't speak so please てどういう意味なんです 2 2022/06/07 22:47
- その他(言語学・言語) Hello Talkをしていて 「I am 17 how old r u?」ときたのですが どういう 1 2022/12/04 16:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ターミナルが全く入力できない
-
Cシェル内でBシェルの様な関数...
-
.cshrc ファイルについて
-
UNIX(hp-ux)のコマンド履歴↑↓
-
シェル 会話形式でエンターキ...
-
BシェルとCシェル
-
ps -aのセッションリーダとは
-
Solaris9でdateコマンドの結果...
-
『存在するかどうか分からない...
-
lsコマンド部分一致方法
-
mac os x10.6.4のターミナルでp...
-
makefile内の$$$$の意味
-
Cシェルでのファイルからの入...
-
シェルとシェルの間で環境変数...
-
バックスラッシュの意味がわか...
-
シェルのコマンドの仕組み
-
export と set は違うの?
-
ubuntuの端末の左にカレントデ...
-
終了ステータスの確認
-
tcshなのにスクリプト構文中のs...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
export と set は違うの?
-
Cシェル内でBシェルの様な関数...
-
シェル 会話形式でエンターキ...
-
シェルスクリプトで #!/bin/sh ...
-
.cshrc ファイルについて
-
『存在するかどうか分からない...
-
ubuntuの端末の左にカレントデ...
-
ターミナルが全く入力できない
-
バックスラッシュの意味がわか...
-
Linuxのファイル禁止文字
-
シェルスクリプトに関する問題...
-
mac os x10.6.4のターミナルでp...
-
シェルスクリプトのbashとperl...
-
違いについて
-
tcshなのにスクリプト構文中のs...
-
シェル(ksh)で変数にある文字列...
-
posixでshellを起動したとき`da...
-
シェルの変数をMySQLに送る方法...
-
Solaris9でdateコマンドの結果...
-
Cシェルでのファイルからの入...
おすすめ情報