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