在Mac OS X上我向我的str.match([a-zA-Z]+(?: |,)*[0-9]{1,2}(?: |,)*[0-9]+$)
添加别名。首先我使用,但因为它是一个构建命令,我发现更合适。
我试过这些:
.bash_profile
奇怪的是,这不是一个有效的别名,正如bash报道:
alias ='echo "build with fun."'
alias ='echo "build with tools."'
alias ='echo "build with style."'
为什么会这样??
答案 0 :(得分:4)
shell想要出于某种原因引用该名称,并且相应地禁止它作为别名。 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
shell为什么要引用该名称?我的第一个猜测来自Unicode 7.0,而来自Unicode 6.0,我使用ls
的行为来说服自己:
~$ touch
~$ ls -b
\360\237\233\240
因为我可以在Linux上使用别名而不是macOS,所以这看起来特别好,因为macOS附带了旧版本的bash - 即使我使用自制软件安装了最新版本。
为了测试这个理论,我尝试了,同样来自Unicode 6.0:
$ alias ,='echo choo choo'
bash: alias: `,': invalid alias name
--> 1
所以不是这样! Linux上的bash很乐意将所有这些字符用作别名。 (并且ls
的行为是一个红色的鲱鱼,因为它将打印(7.0)为utf-8但Mac上的bash会接受它作为别名。)
但别名名称函数似乎将字符串视为 bytes ,而不是字符,并且这两种失败都以0xA0
结尾,我知道这是非破碎的空间'在Latin-1中。没有跳到所有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 :(得分:1)
你需要反斜杠\
来忽略特殊含义
alias \ =' echo"有趣的构建。"'
别名\ =' echo" build with 工具"'
别名\ =' echo"以风格建造。"'
<强> 试验: 强>
$ tes*
test test_script.sh test.sh test.xml
$grep '' .bash_profile
alias \ =&#39; ls&#39;