为什么bash告诉我在运行以下代码时找不到命令if?

时间:2010-11-09 22:09:23

标签: bash if-statement environment-variables

抱歉,我对bash相对较新,但是

if [ ! -d /home/$USER/testfoo ]; then mkdir /home/$USER/testfoo; fi
如果目录testfoo不存在,

具有所需的效果

TESTCMD="if [ ! -d /home/$USER/testfoo ]; then mkdir /home/$USER/testfoo; fi"
$TESTCMD

返回

if: command not found

我做错了什么?

1 个答案:

答案 0 :(得分:3)

如果您使用变量作为这样的命令,它会将变量的内容解释为命令的名称,而不是作为命令后跟其参数。

因此,如果您执行VAR="foo bar"然后$VAR,它会查找名为foo bar的可执行文件(或内置文件),而不是名为foo的可执行文件使用参数bar进行调用。

要做你想做的事,你需要定义一个函数:

TESTCMD() {
  if [ ! -d /home/$USER/testfoo ]
  then
    mkdir /home/$USER/testfoo
  fi
}
TESTCMD