🐕

【シェルスクリプト】`$ echo '-eq'`みたいにオプションっぽい文字列を表示しようとすると、無が表示される

2025/02/27に公開2

単純だけど、そういうことです。

$ echo '-eq'
(無)

おそらくechoコマンドの-eqオプションを実行しようとしているんだと思う。
おまえ-eqオプションなんてないだろうが!!!

解決策はprintfです。
printfしか勝たん。

$ printf '%s\n' '-eq'
-eq

ちなみに以下でもムダムダムダァです。
全部吸収するじゃん…そりゃそうなんだけど。

$ x=$(printf '%s\n' '-eq')
$ echo "$x"
(無)

こいつなんでも食いやがる…。
なんも信じられん。

ちなみになんでこんな異常行動をしようと思ったかというと、Bash/Zsh向けのJestみたいなものを作ろうと思ったからです。
こういうやつ。

$ x=10
$ expects "$x" to_be 10 && echo Success
Success
$ x=42
$ expects "$x" to_be 10
FAIL: expected {actual} to_be 10, but {actual} is: 42

需要あるのか?

あと、なんで修正方法聞いたのに、全く教えてくれなかったんだよ、GitHub Copilot Chatたん~~~!!!

Discussion

ko1nksmko1nksm
echo '-eq'

が、何も出力しない POSIX シェルはないはずなんですが...
理由は echo-q なんてオプションは持たないからです。
-e だけならわかりますが、echo のオプション(というか引数)の解釈は特殊で -eq の場合 -eq という文字列が出力されるはずです。

ko1nksmko1nksm

ああ、なるほど。実際に実行したのは -eq ではなく -ne ですね。これなら -n-e もあるので何も出力されません。