Linux 中的 touch() 命令要求输入我们应该在那里输入什么?

问题描述

我正在尝试使用 touch 命令,当我输入 touch () 命令时,我预计会出现错误或名为 () 的新空文件。 相反,我得到了这个

touch ()
> 

它希望我输入一些东西。
这个 touch () 命令是做什么的?有什么用?

解决方法

使用 touch (),您的 shell 期望您定义一个函数,如下所示:

touch () {
  echo "Hello"
}

(不要那样做)

由于 () 是 shell 元字符,如果您想创建具有此类名称的文件,请将它们转义或将它们放在引号中:

touch \(\)
touch '()'
touch "()"
,

这个问题有点像错觉,基于命令类型之间的混淆——有些命令是 shell 内置的关键字,(如 forif),有些是别名,(如大多数发行版中的 lslll),有些是函数,但大多数是可执行文件。

虽然有 touch 命令(在 Ubuntu 中它激活可执行文件 /usr/bin/touch),但代码 touch () 永远不会接近它。

正如 iBug's answer 所指出的,() 告诉 shell 正在定义一个函数,但由于没有代码,shell 会提示用户输入一些。

然而,这并非特定于 touch 命令。 shell 会对任何命令执行相同的操作,无论是真实的:

 bash ()
 less ()

或编造:

foobarbaz()

也有例外。例如,如果命令是一个别名,比如ls,就会发生这种情况:

ls ()
bash: syntax error near unexpected token `('