问题描述
我正在尝试使用 touch
命令,当我输入 touch ()
命令时,我预计会出现错误或名为 ()
的新空文件。
相反,我得到了这个
touch ()
>
它希望我输入一些东西。
这个 touch ()
命令是做什么的?有什么用?
解决方法
使用 touch ()
,您的 shell 期望您定义一个函数,如下所示:
touch () {
echo "Hello"
}
(不要那样做)
由于 ()
是 shell 元字符,如果您想创建具有此类名称的文件,请将它们转义或将它们放在引号中:
touch \(\)
touch '()'
touch "()"
,
这个问题有点像错觉,基于命令类型之间的混淆——有些命令是 shell 内置的关键字,(如 for
和 if
),有些是别名,(如大多数发行版中的 ls
和 ll
和 l
),有些是函数,但大多数是可执行文件。
虽然有 touch
命令(在 Ubuntu 中它激活可执行文件 /usr/bin/touch
),但代码 touch ()
永远不会接近它。
正如 iBug's answer 所指出的,()
告诉 shell 正在定义一个函数,但由于没有代码,shell 会提示用户输入一些。
然而,这并非特定于 touch
命令。 shell 会对任何命令执行相同的操作,无论是真实的:
bash ()
less ()
或编造:
foobarbaz()
也有例外。例如,如果命令是一个别名,比如ls
,就会发生这种情况:
ls ()
bash: syntax error near unexpected token `('