Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在不使用引号的情况下删除名为*(星号)的文件?_Linux_Bash_Shell - Fatal编程技术网

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 [*]