\curl -L https://get.rvm.io | bash -s stable
Run Code Online (Sandbox Code Playgroud)
为什么命令以\?开头?
这是我看到它的网站.
Linux中是否有任何方法可以计算O(1)中目录(即直接子节点)中的文件数(与文件数无关),而无需先列出目录?如果不是O(1),是否有合理有效的方法?
我在寻找替代方案ls | wc -l.
在我的问题的第一部分,我将提供一些背景信息作为社区服务.第二部分包含实际问题.
第一部分
假设我创建了以下别名:
alias ls='ls -r'
Run Code Online (Sandbox Code Playgroud)
我知道如何使用以下方式暂时unalias(即覆盖此别名),使用:
1)命令的完整路径名: /bin/ls
2)命令替换: $(which ls)
3)内置命令: command ls
4)双引号: "ls"
5)单引号: 'ls'
6)反斜杠字符: \ls
案例1是显而易见的,案例2只是一种变化.案例3中内置的命令旨在忽略shell函数,但显然它也可用于规避别名.最后,案例4和5与POSIX标准(2.3.1)一致:
"应检查一个被识别为简单命令的命令名字的结果字,以确定它是否是一个不带引号的有效别名."
"检查每个简单命令的第一个单词,如果没有引用,则检查它是否有别名."
第二部分
这是一个问题:为什么案例6(通过说法覆盖别名\ls)考虑引用这个词?为了与这个问题的风格保持一致,我正在寻找对"官方"文档的引用.
文档说反斜杠只转义后续字符,而不是单引号和双引号引用一系列字符. POSIX标准(2.2.1):
"未引用的反斜杠应保留以下字符的字面值,但<newline>除外"
"一个非引用的反斜杠'\'是Bash转义字符.它保留了下一个字符的字面值,除了换行符."
(顺便说一句,是不是"下一个角色"有点矫枉过正?)
一个可能的答案可能是这种情况并不那么特别:它类似于ANSI-C引用中的一些情况,例如\nnn.然而,这仍然是逸出的单个字符(八位字符,其值是八进制值NNN),而不是一个字符序列.