我怀疑这与我的Mac上的oh-my-zsh
设置有关,但我无法理解。当我在命令行上执行ls *.sh
时,我会得到类似的内容:
foo.sh* bar.sh*
我了解默认情况下-F
适用于ls
:
-F在作为目录的每个路径名之后立即显示斜杠(' /'),在每个可执行的路径名后面显示一个星号(' *'),at 在每个符号链接后面加上一个等号(' =') 套接字,每次白化后的百分号('%')和垂直条 (' |')在每个FIFO之后。
我真的想列出没有分类器的文件名。这是可取的,因为没有它,我的for
:
for f in `ls *.sh`
do
wc -l $f
done
中断可执行shell脚本(因为尾随*
):
wc: foo.sh*: open: No such file or directory
wc: bar.sh*: open: No such file or directory
当然,我可以轻松解决这个问题。我只是想知道我是否可以在ls
命令的输出上处理它。此外,当我的shell为bash
时,这可以正常工作。
答案 0 :(得分:2)
无需使用ls
即可生成匹配文件列表。您可以直接使用该模式:
for f in *.sh
do
wc -l $f
done
这也有利于处理包含空格的文件名。
一般来说:ls的输出是供人类消费的,不应该被解析。通常文件列表可以直接使用通配符生成,ls
可能提供的任何信息都可以通过其他方式检索(例如stat
)。
话虽如此:
默认情况下未启用 -F
,因此为什么有一个选项。我怀疑ls
是别名。您可以查看
whence -v ls
默认情况下, oh-my-zsh 会为ls
创建别名,-F
不属于设置。
如果您只想使用未经修改的ls
(可能有不同的选项),可以添加command
预命令修饰符:
command ls
这将运行外部命令ls
(通常为/bin/ls
)而不是别名或函数。
如果您想要永久删除-F
,可以在配置的最后覆盖它。或者您追踪它的位置并在那里进行更改。此命令可能有助于找到别名的设置位置:
grep -r $(whence ls) ~/.zshrc ~/oh-my-zsh.sh ~/.oh-my-zsh
根据您的设置,可能还有其他配置文件。