bash
  • unicode
  • 2016-12-13 3 views 2 likes 
    2

    Mac OS Xでは.bash_profileにエイリアスを追加しています。最初に私は使用しましたが、それはビルドコマンドであるので、私はより適切なものを見つけました。は無効なBashエイリアスです

    私はこれらを試してみました:

    alias ='echo "build with fun."' 
    alias ='echo "build with tools."' 
    alias ='echo "build with style."' 
    

    変なふうに、bashの報告として、有効なエイリアスではありません。

    -bash: alias: `': invalid alias name 
    

    それはなぜですか..?あなたが戻っ必要

    +0

    引用符(一重または二重)を入れてみましたか?コードエイリアス\ = 'エコー "ツールを使用してビルドしてください。" -bash: –

    +0

    はい、同じ問題... – TTT

    答えて

    4

    シェルは、何らかの理由でその名前を引用したいと考え、それに応じてエイリアスとしてそれを許可しませんさ。 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マシンでこのチェックが無視されているのかわかりません。

    +1

    Macは「間違っている」、「0xA0」はUTF-8の完全に有効な継続バイトです。 ISO-8859-1として有効なUTF-8を解釈しようとすると間違っています。その「チェック」は本当の意味を持ちません。 – sorontar

    0

    は特別な意味を無視する\スラッシュ

    エイリアス\ =
    別名 ' "楽しさで構築しています。" エコー' \ = ' " ツールで構築しています。" エコー'
    別名\ = ' "スタイルで構築しています。" エコー'

    テスト:

    $ tes* 
    test test_script.sh test.sh test.xml 
    $grep '' .bash_profile 
    

    エイリアス\ =「1!」

    +0

    ct @ MBA45:エイリアス: '':無効なエイリアス名 –

    関連する問題