0
#! /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

ところで、なぜ内側の括弧をエスケープする必要があるのですか?

4

2 に答える 2

3

Bash はスペースを使用してトークンを区切り、コマンドに引数として渡します (この場合、コマンドは ですtest)。詳細については、man ページを参照しtestてください。

解決するには、オペランドの間にスペースを追加する必要があります。

if [ ! \( -f new.bash -o -d new.bash \) ]
于 2012-10-04T09:39:58.737 に答える
2

を使用bashしていて、POSIX との互換性を放棄してもかまわない場合は、次の手順が少し簡単になります。

if [[ ! ( -f new.bash || -d new.bash ) ]]; then

||の代わりに使用でき-o、かっこをエスケープする必要はありません。

于 2012-10-04T14:21:08.123 に答える