#! /bin/bash
if [ !\(-f new.bash -o -d new.bash\) ]
then
echo "Neither"
else
echo "yes"
fi
它可以工作,但会出现错误:
/file_exist_or_not.bash
./file_exist_or_not.bash: line 3: [: too many arguments
yes
顺便说一句,为什么需要转义内括号?
Bash 使用空格来分隔标记,然后将它们作为参数传递给命令(在这种情况下,命令是test
)。有关更多详细信息,请参见手册页test
。
要解决,您需要在操作数之间添加空格。
if [ ! \( -f new.bash -o -d new.bash \) ]
如果您正在使用bash
并且不介意放弃 POSIX 兼容性,则以下内容会更简单一些:
if [[ ! ( -f new.bash || -d new.bash ) ]]; then
您可以使用||
而不是-o
,括号不需要转义。