#! /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
BTW,为什么内部括号需要被转义?
答案 0 :(得分:3)
Bash使用空格来分隔标记,然后将标记作为参数传递给命令(在这种情况下命令为test
)。有关详细信息,请参阅test
的手册页。
要解决此问题,您需要在操作数之间添加空格。
if [ ! \( -f new.bash -o -d new.bash \) ]
答案 1 :(得分:2)
如果您使用bash
并且不介意放弃POSIX兼容性,则以下内容会更简单:
if [[ ! ( -f new.bash || -d new.bash ) ]]; then
您可以使用||
代替-o
,并且不需要转义括号。