🐕
【シェルスクリプト】`$ echo '-eq'`みたいにオプションっぽい文字列を表示しようとすると、無が表示される
単純だけど、そういうことです。
$ 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
が、何も出力しない POSIX シェルはないはずなんですが...
理由は
echo
は-q
なんてオプションは持たないからです。-e
だけならわかりますが、echo
のオプション(というか引数)の解釈は特殊で-eq
の場合-eq
という文字列が出力されるはずです。ああ、なるほど。実際に実行したのは
-eq
ではなく-ne
ですね。これなら-n
も-e
もあるので何も出力されません。