2013-06-17 26 views
12
#!/bin/bash 
function getComment(){ 
    local lang=$1; 
    local theComment=$2; 
    if [$lang == "Java"] #Surprisingly, an error occurs here: prog.sh: line 6: [Java: command not found 
    then 
     echo "//"$theComment; return; 
    else 
     echo "Language not found!"; return; 
    fi 
} 

getComment "Java" "Whoo!"; 

exit $? 

Tôi đang viết một kịch bản Bash so sánh một biến thành một chuỗi theo nghĩa đen, và tôi đang sử dụng [$lang == "Java"] (như trình bày ở trên) để so sánh giá trị của lang-"Java" . Tuy nhiên, so sánh này tạo ra các lỗi sau:Hãy so sánh một chuỗi Bash đen cho một biến địa phương

stderr: 
prog.sh: line 6: [Java: command not found 

Tôi đã cố gắng sử dụng [$lang -eq "Java"]($lang -eq "Java") là tốt, nhưng những báo cáo đã không làm việc một trong hai, và họ được sản xuất một cách chính xác các lỗi tương tự.

Tại sao lỗi này xảy ra và cách chính xác để so sánh biến cục bộ với chuỗi ký tự là gì?

+0

Điều này không liên quan đến câu hỏi của bạn, nhưng bạn không cần dấu chấm phẩy ở cuối dòng trong trình bao. Chúng chỉ cần thiết nếu bạn đặt nhiều lệnh trên một dòng. –

+0

có thể trùng lặp của [bash, lệnh không tìm thấy] (http://stackoverflow.com/questions/16694586/bash-command-not-found) – chepner

+1

Không phải là bản sao tốt nhất, nhưng có nhiều câu hỏi trên Stack Overflow với cùng một câu trả lời : đặt dấu cách xung quanh '[' và ']' của lệnh 'test'. – chepner

Trả lời

22

Bạn cần không gian xung quanh []:

if [ "$lang" = "Java" ] 

[ là một lệnh (đó là một từ đồng nghĩa với test), và giống như bất kỳ lệnh khác mà bạn phân định các thông số với các không gian.

Bạn cũng nên đặt biến trong dấu ngoặc kép, trong trường hợp giá trị trống hoặc chứa ký tự khoảng trống hoặc ký tự đại diện.

Cuối cùng, toán tử thực hiện so sánh chuỗi là =, mặc dù một số phiên bản test cho phép == làm tiện ích.

+0

câu trả lời hay với ngữ cảnh –

1

Điều đầu tiên là, không sử dụng [] - đó là better để sử dụng [[.

Và thứ hai - bạn cần phải thêm một số không gian:

if [[ $lang == Java ]] 
+0

Toán tử so sánh == hoạt động khác trong thử nghiệm dấu ngoặc kép so với trong dấu ngoặc đơn. http://tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS –

2

Trước tiên, bạn phải kèm theo biến giữa dấu ngoặc kép, bởi vì các biến thể có một số khoảng trắng hoặc ký tự đặc biệt.

Cuối cùng hãy nhớ rằng "[" đó là bản thực thi (thường là trong/bin).

if [ "$lang" == "Java" ]; then 
Các vấn đề liên quan