【发布时间】:2014-03-17 15:25:35
【问题描述】:
我想列出我的home 文件夹中的所有文件,并删除文件名中的#。
例如:
#.emacs# 应打印为.emacs
这是我的代码
for dir in $(ls ~)
do
# trim trailing
filename="${dir#\#}"
echo ${filename}
done
但它仍然显示以# 开头的文件,尽管我在终端中管理了正则表达式${dir#\#}。
你能告诉我代码中的异味在哪里吗?
【问题讨论】:
-
目前尚不清楚您要实现的目标是什么。你能举个例子吗?
-
你能显示“之前和之后”的文件名吗?可能是您需要转义反斜杠 (
filename="${dir#\\#}")? -
您似乎想
mv文件。而不是echo,说mv "${dir}" "${filename}"。 -
好的,更新后您应该会在
BMW's答案中看到第一个示例。您还应该将脚本更改为不解析ls,除非您想引入其他错误。 (请注意,您可以使用"${dir##*/}"或basename "$dir"删除前进的路径字符) -
@BroSlow:我提到这一点是为了防止混淆不是偶然的:我认为您的意思是 preceding,而不是 proceeding -后者意味着别的东西。
标签: regex linux bash shell terminal