Linux 如何在不使用引号的情况下删除名为*(星号)的文件?
我执行了以下命令来创建一个名为Linux 如何在不使用引号的情况下删除名为*(星号)的文件?,linux,bash,shell,Linux,Bash,Shell,我执行了以下命令来创建一个名为*(星号)的文件: 现在我应该删除这个文件而不使用任何引用 我知道如何使用引号删除此项,但不知道不使用引号如何删除 我尝试了以下命令,但由于命令行扩展,我确信这些命令无法工作: rm ./* rm /* 如果有人能帮我,我将不胜感激。您可以使用。如果rm命令直接跟随echo命令,则可以使用: $是的简写形式!!!!:$:重复最后一个命令(!!)的最后一个单词($) 如果在echo和rm命令之间有命令,可以使用以下命令查找历史编号: !27628扩展到历史记录中具有
*
(星号)的文件:
现在我应该删除这个文件而不使用任何引用
我知道如何使用引号删除此项,但不知道不使用引号如何删除
我尝试了以下命令,但由于命令行扩展,我确信这些命令无法工作:
rm ./*
rm /*
如果有人能帮我,我将不胜感激。您可以使用。如果rm
命令直接跟随echo
命令,则可以使用:
$
是的简写形式!!!!:$代码>:重复最后一个命令(!!
)的最后一个单词($
)
如果在echo
和rm
命令之间有命令,可以使用以下命令查找历史编号:
!27628
扩展到历史记录中具有该数字的命令,$
再次是该命令的最后一个字
如果必须在脚本中运行此命令,则无法真正查找并插入命令编号,但可以计算echo
和rm
之间的命令编号,并使用相对事件指示器:
echo > '*'
cmd1
rm !-2:$
其中-2
指返回两行的命令。请注意,在非交互式Shell中,默认情况下禁用历史扩展;使用
shopt -o history
启用它。我想你应该自己解决这个问题:-)
不涉及引用的最简单解决方案是使用模式[*]
。shell中的括号表达式的工作原理与正则表达式中的字符类非常相似,因此它将匹配名称为单个字符的文件*
。因此,您可以使用删除文件
rm [*]
请注意,您不能使用该模式创建名为*
的文件,因为shell将包含模式的单词替换为与模式匹配的文件名;如果不存在这样的文件,则模式不匹配且不执行替换。因此,如果没有名为*
的文件,则触摸[*]
将创建名为[*]
的文件 如果文件数量不是太多,可以使用rm-i*
。这将要求对每个文件进行确认。确认仅删除文件*
,并拒绝删除所有其他文件。以创建文件rm'*'
或rm\*
的相同方式删除它。@Inian\
不是引号,但它同样会阻止扩展。@Amadan\
显示在Bash手册的下面,“不过,”本杰明说。有三种引用机制:转义字符、单引号和双引号。反斜杠不是引号(名词),但它是引号(动词)。你可以用小酒杯把汤舀进嘴里;但是一个小酒杯不是勺子(名词)。
echo > '*'
cmd1
rm !-2:$
shopt -o history
rm [*]