2012-03-09 2 views
5

ファイルが存在するかどうかを確認しようとしています。これは`[-e file.txt]`がbashで動作しない場合

if [-e file.txt]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 

私のコードですが、私はそれを実行したときに私が取得:

./test.sh: line 3: [-e: command not found 

は私が間違って何をしているのですか?

答えて

10

[はBashでは特別なトークンではありません。 という単語[は組み込みのコマンドです(ちょうどechoのようなものです)。だから、後にスペースが必要です。そして、同様に、あなたは]の前にスペースが必要になります(それはまだスペースが必要ですが)

if [ -e file.txt ] ; then 

言った、私は—代わり[[ ]]をお勧めします、それはいくつかの方法で安全です:

if [[ -e file.txt ]] ; then 
+0

+1。ちょうど '[['はbashの機能ですので、 '/ bin/sh'でスクリプトを呼び出すことはできません。 –

+0

あなたの答えを編集して二重大括弧が安全である理由を説明できますか? – Relequestual

2
if [ -e file.txt ]; then 

スペースが必要です。 [および]は通常のプログラムです。

+5

は知識をひけらかすされるように、 ']'プログラムではありません、それはのために必要な最後の引数で '['コマンド –

+0

「グレン・ジャックマン」@:もちろん。ごめんなさい。 – jacekmigacz

0

'['と ']'は 'on-their-own'である必要があります。つまり、スペースで囲まれている必要があります。

if [ -e file.txt ] *emphasized text*; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 
2

Woops、私は[-eの間にスペースが必要だとわかった。このように:

if [ -e file.txt ]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 
関連する問題