-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
337eb10
commit b5b19ed
Showing
1 changed file
with
52 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
# メタデータ | ||
- title=echoコマンドで"-n"をそのまま出力したい | ||
- description=Bashのechoコマンドで"-n"をオプションとして解釈せずに文字列としてそのまま出力する方法を紹介します。 | ||
- date=2025年1月7日(火) | ||
- update=2025年1月7日(火) | ||
- math=false | ||
- tag=tech | ||
|
||
## 概要 | ||
|
||
Bashのechoコマンドで`-n`をオプションとして解釈せずに文字列としてそのまま出力する方法を紹介します。 | ||
|
||
## 問題点 | ||
|
||
下記のようにコマンドを実行すると`-n`はオプションとして解釈されて、 | ||
結果としては何も出力されません。 | ||
|
||
``` | ||
$ echo "-n" | ||
# 何も出力されない | ||
``` | ||
|
||
Bashでは`--`をつけると「これ以降はオプションではない」ことを意味しますが、 | ||
どうやらechoではこれは使えないようです。 | ||
|
||
``` | ||
$ echo -- "-n" | ||
-- -n | ||
``` | ||
|
||
## 解決策 | ||
|
||
たとえば-nの前に半角スペースを入れて" -n"とすると文字列として解釈されます。 | ||
|
||
``` | ||
$ echo " -n" | ||
-n | ||
``` | ||
|
||
しかしこれだと当然のことながら半角スペースも一緒に出力されてしまうので、 | ||
同じ要領で`\0-n`にするとよさそうです。 | ||
`\0`はNULLのエスケープ文字です。 | ||
また、エスケープ文字を解釈するために`-e`をつけます。 | ||
|
||
``` | ||
$ echo -e "\0-n" | ||
-n | ||
``` | ||
|
||
注意点として実行環境によっては`\0`の挙動が変わるかもしれません。 | ||
|
||
以上です。 |