我搜索了 SO,发现将以下字符串大写是可行的
str="Some string"
echo ${str^^}
Run Code Online (Sandbox Code Playgroud)
但是我试图在命令行参数上做类似的事情,这给了我以下错误
#!/bin/bash
## Output
echo ${1^^} ## line 3: ${1^^}: bad substitution
echo {$1^^} ## No error, but output was still smaller case i.e. no effect
Run Code Online (Sandbox Code Playgroud)
我们怎么能做到这一点?
我想列出与某个模式匹配的所有文件,同时忽略大小写。
例如,我运行以下命令:
ls *abc*
Run Code Online (Sandbox Code Playgroud)
我想查看所有将“abc”作为文件名一部分的文件,忽略大小写,例如
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file1abc.txt
-rw-r--r-- 1 mtk mtk 0 Sep 21 08:12 file2ABC.txt
Run Code Online (Sandbox Code Playgroud)
我已经在手册页中搜索了案例,但找不到任何内容。
试图找出如何使用不区分大小写的搜索,less我在 serverfault 上找到了这个。
这似乎完美地回答了我的问题。问题是:它在这里不起作用(OpenSUSE 13.1;少于 458)。
我有别名less,less -WiNS但我改变了。但即使称之为 ascommand less file也不会改变任何东西。我已经检查过命令行中ps不再有任何-i选项。
正如答案所说,less帮助(按h)指出我也可以-i在 内使用less。如果我使用一次,然后less告诉我它已更改为不区分大小写的搜索(这是正确的:没有任何变化)。如果我使用它两次,然后less告诉我它已转向区分大小写的搜索。是的,那么它从一开始就可以正常工作。但是-i,在命令行上提供两次不起作用。
这是怎么回事?
为什么是这样?
当我这样做时
CD ~/Desktop
Run Code Online (Sandbox Code Playgroud)
它不会带我进入桌面。但是这个:
echo "foo
bar" | GREP bar
Run Code Online (Sandbox Code Playgroud)
给我:
bar
Run Code Online (Sandbox Code Playgroud) 是ssh abc@servername从不同ssh Abc@servername?用户名的大小写在 Unix 中重要吗?
我的用户通过 LDAP 进行身份验证。
我有没有办法在目录中找到具有重复文件名的所有文件,而不管大小写(大写和/或小写)?
我刚读到下面这句话:
区分大小写是 Linux 文件系统的功能,而不是 Linux 操作系统。
我从这句话中推断出的是,如果我在 Linux 机器上,但我正在使用使用 Windows 文件系统格式化的设备,那么区分大小写就不是一回事了。
我尝试了以下方法来验证这一点:
$ ~/Documents: mkdir Test temp
$ ~/Documents: touch Test/a.txt temp/b.txt
$ ~/Documents: ls te*
b.txt
Run Code Online (Sandbox Code Playgroud)
它只列出了 temp目录中,这是预期的,因为我在 Linux 文件系统中。
当我导航到 Windows 文件系统时(注意:我使用的是 WSL2),我仍然得到相同的结果,但我希望它列出两个目录中的文件而忽略区分大小写。
$ /mnt/d: mkdir Test temp
$ /mnt/d: touch Test/a.txt temp/b.txt
$ /mnt/d: ls te*
b.txt
Run Code Online (Sandbox Code Playgroud)
我用 bash 和 zsh 都试过了。
我觉得它与 bash(或 zsh)有某种关系,因为我也读到 bash 强制区分大小写,即使在使用不区分大小写的文件系统时也是如此。
此测试适用于 Powershell,因此这意味着文件系统确实不区分大小写。
我正在处理网站转换。从 Web 服务器链接和提供的文件不区分大小写。但是,我已经在我的 linux 系统上制作了该站点的转储,并且我正在编写脚本来迁移数据。问题是我在页面中的链接字符串和文件系统上的实际单词大小写之间遇到了区分大小写的问题。
例如,一个页面可能有一个链接,<a href='/subfolder/PageName.asp'>而实际文件是/subfolder/pagename.asp. 同样的图像 -<img src='spacer_sm.gif'>可能是Spacer_Sm.gif.
所以我的想法是将所有目录和文件名更改为站点下载的小写等效项。我该怎么做(可能有更好的方法吗?)
即使有不区分大小写开关的 unix 命令,我使用的是 php,所以并不是所有的文件系统命令都有区分大小写的选项。
在 中vim,我知道我可以在区分大小写或不区分大小写的情况下进行搜索。但是,如果我想搜索大写或小写的字符串,并用相同大小写的替换来替换它,这是否可以在单个:s///?
例如,我想更改这些行:
short
Short
SHORT
Run Code Online (Sandbox Code Playgroud)
到
long
Long
LONG
Run Code Online (Sandbox Code Playgroud)
我可以用三个:s命令来做到这一点,或者一个不敏感:s并手动修复案例,但有更好的方法吗?保留大小写的搜索和替换?
前几天,当我从事一个依赖于关于文件名的自以为是的框架的开发项目时,我想到了这个问题。该框架(此处无关)希望看到大写优先的文件名。这让我思考。
上不区分大小写的文件系统,说extFAT或HFS +(具体不区分大小写)如何在文件系统提供访问相同的文件两者的文件名的上部和下部壳体的版本。
例如:
$ cd ~/Documents
$ pwd
/home/derp/Documents
$ cd ../documents
$ pwd
/home/derp/documents
$ cd ../docuMents
$ pwd
/home/derp/docuMents
$ cd ../DOCUMENTS
$ pwd
/home/derp/DOCUMENTS
$ cd ../documentS
$ pwd
/home/derp/documentS
Run Code Online (Sandbox Code Playgroud)
所有这些命令都将解析到同一目录。这种行为,特别pwd是bash在这种情况下只是一个函数的输出只是向我展示了它认为我想看到的东西吗?
另一个例子:
$ ls ~/Documents
Derp.txt another.txt whatThe.WORLD
Run Code Online (Sandbox Code Playgroud)
此处的文件系统报告由用户或程序创建的原始文件名的大小写。
文件系统堆栈中的哪个点是人类可读的文件名在创建时保留(例如大写和小写),以便可以通过正确的大写和小写 ASCII 字符的任意组合访问它?这只是某个地方的正则表达式技巧还是有其他事情发生?
编辑:它看起来像我很好奇中发现的行为的情况下保留后一些调查研究不区分大小写的文件系统......