我正在使用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的回答所述,()
告诉shell正在定义一个函数,但由于没有代码,shell提示用户输入一些。
这不是touch
命令所特有的。shell将对任何命令执行相同的操作,无论是真实的:
bash ()
less ()
或组成:
foobarbaz()
也有例外。例如,如果命令是别名,如ls
,则会发生以下情况:
ls ()
bash: syntax error near unexpected token `('