シェルは、何らかの理由でその名前を引用したいと考え、それに応じてエイリアスとしてそれを許可しませんさ。 general.c:legal_alias_name()。
これは、locale
がすべての値に対して 'en_US.UTF-8'を出力しても同じです。
は異なる絵文字を試してみてください。
~$ alias ='echo oh bother'
~$
oh bother
~$ alias ='echo build'
bash: alias: `': invalid alias name
--> 1
なぜシェルはその名前を引用したいのでしょうか?私の最初の推測では、それがUnicode 6.0から7.0しばらくのUnicodeからである、と私はこれを自分自身を納得させるls
の振る舞いを使用:
~$ touch
~$ ls -b
\360\237\233\240
私はLinux上でエイリアス名として使用することができますのではなく、MacOSの、これをmacOSにはbashの古いバージョンが同梱されているので、私はhomebrewを使って最新のバージョンをインストールしたにもかかわらず、特に良く見えました。この理論をテストする
、私はまた、ユニコード6.0から、試してみました:
$ alias ,='echo choo choo'
bash: alias: `,': invalid alias name
--> 1
だからそれはそれではありません!そして、Linux上のbashはこれらの文字すべてをエイリアスとして使用するのはうれしいです。 (ls
の動作は、(7.0)utf-8として印刷されますが、Macではbashがエイリアス名として受け入れられるため、赤いニシンです)。
しかし、エイリアス名機能は文字列を考慮しているようですバイトとして、文字としてではなく、これらの両方の失敗は、私が知っている0xA0
で終わります。すべてのCマクロ宣言に飛び込むことなく、私はその人物が疑わしいと賭ける。
Mac$ alias $'\u00a0'=foo
bash: alias: ` ': invalid alias name
--> 1
Linux$ alias $'\u00a0'=foo
Linux$ $'\u00a0'
: command not found
--> 127
だから、明らかに、そのUTF-8エンコーディングA0
バイトが含まれていない文字を選択します。しかし、なぜ私のLinuxマシンでこのチェックが無視されているのかわかりません。
引用符(一重または二重)を入れてみましたか?コードエイリアス\ = 'エコー "ツールを使用してビルドしてください。" -bash: –
はい、同じ問題... – TTT