ABS指南中有一段代码片段。
#!/bin/bash
# uppercase.sh : Changes input to uppercase.
tr 'a-z' 'A-Z'
# Letter ranges must be quoted
#+ to prevent filename generation from single-letter filenames.
exit 0
我不明白这个评论,我仍然感到困惑
为什么我要引用字母范围?
我在git bash中执行这些代码,一切正常
任何人都可以告诉我一个例子,如果我不引用字母范围,我会收到错误吗?
对不起我的英语不好并帮忙......
答案 0 :(得分:4)
该片段的评论是错误的(因为ABS的大部分内容;它是一个非常差的参考,不应该使用)。
如果有方括号:
tr [A-Z] [a-z]
... 然后您对[AZ]匹配的文件A
,B
等有疑虑。有关更明显的演示,请尝试这样:
mkdir -p ~/tmp
cd ~/tmp
touch A B C
echo tr [A-Z] [a-z]
......看看它发出了什么。
作为注释 - 如果设置了nullglob
选项,即使磁盘上没有单字符文件名,也可能在此处遇到麻烦。为了证明:
rm -rf ~/tmp
mkdir -p ~/tmp
cd ~/tmp
shopt -s nullglob
echo tr [A-Z] [a-z]
...并且您会看到tr
被调用而根本没有参数,因为[A-Z]
和[a-z]
都被解释为不匹配任何文件的glob表达式,nullglob
告诉shell简单地替换这些glob表达式。
要明确 - 全局扩展与tr
具体无关;无论运行什么程序,shell都会将不带引号的[A-Z]
更改为与模式匹配的单字符文件名列表。