2012-03-09 26 views
5

Tôi đang cố gắng kiểm tra xem tệp có tồn tại bằng bash hay không. Đây là mã của tôi`if [-e file.txt]` không hoạt động trong bash

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

Nhưng khi tôi chạy nó tôi nhận được:

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

Tôi đang làm gì sai?

Trả lời

10

[ không phải là mã thông báo đặc biệt trong Bash; chỉ cần từ[ là lệnh nội trang (giống như echo). Vì vậy, bạn cần một không gian sau đó. Và cũng giống như vậy, bạn cần một không gian trước ]:

if [ -e file.txt ] ; then 

Điều đó nói rằng, tôi khuyên bạn nên [[ ]] thay — nó an toàn hơn trong một vài cách (mặc dù nó vẫn đòi hỏi các không gian):

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

+1. Chỉ cần lưu ý rằng '[[' là một tính năng bash, vì vậy bạn không thể gọi kịch bản của mình bằng '/ bin/sh' –

+0

Có thể chỉnh sửa câu trả lời của bạn để giải thích TẠI SAO hai dấu ngoặc vuông an toàn hơn? – Relequestual

2
if [ -e file.txt ]; then 

Bạn cần khoảng trắng. [] là các chương trình thông thường.

+5

được pedantic, ']' không phải là một chương trình, nó là lập luận cuối cùng cần thiết cho môi trường '[' lệnh –

+0

@ "glenn jackman": Tất nhiên. Lấy làm tiếc. – jacekmigacz

0

'[' và ']' cần phải được 'bật - riêng của họ', tức là được bao quanh bởi khoảng trắng.

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

Woops, hóa ra tôi cần một khoảng trống giữa [-e. Như thế này:

if [ -e file.txt ]; then 
    echo "file exists" 
else 
    echo "file doesn't exist" 
fi 
Các vấn đề liên quan