2011-11-02 24 views
5

Từ trang web này:Quy ước Bash cho nếu; sau đó

http://tldp.org/LDP/abs/html/abs-guide.html

Nó đề cập đến việc sử dụng các khung nếu sau đó ước mà cần một không gian sau dấu chấm phẩy:

;

Command separator [semicolon]. Permits putting two or more commands on the same line. 

echo hello; echo there 


if [ -x "$filename" ]; then # Note the space after the semicolon. 
#+     ^^ 
    echo "File $filename exists."; cp $filename $filename.bak 
else #      ^^ 
    echo "File $filename not found."; touch $filename 
fi; echo "File test complete." 

Note that the ";" sometimes needs to be escaped. 

Có ai biết nơi được này đến từ đâu và nếu điều này là cần thiết ở tất cả bởi vỏ nhất định?

Trả lời

8

này đã trở thành phong cách trong vài năm trở lại đây:

if [ -x "$filename" ]; then 
    echo "hi" 
fi 

Tuy nhiên, trở lại khi khủng long như Burroughs và Sperry Rand cai trị trái đất, tôi đã học để viết nếu phát biểu như thế này:

if [ -x "$filename" ] 
then 
    echo "hi" 
fi 

Sau đó, bạn thậm chí không cần dấu chấm phẩy.

Phong cách mới với then trên cùng một dòng như if bắt đầu để bắt chước cách C và các ngôn ngữ lập trình khác đã làm if báo cáo của họ:

if (! strcmp("foo", "bar")) { 
    printf "Strings equal\n"; 
} 

Những ngôn ngữ lập trình đặt nẹp xoăn mở trên cùng dòng với số if.

+0

C không yêu cầu bạn đặt dấu ngoặc nhọn mở trên cùng một dòng. một quy ước mã hóa của nó và nhiều người không thích phương pháp này [https://softwareengineering.stackexchange.com/questions/2715/should-curly-braces-appear-on-their-own-line] – mightyWOZ

0

Không gian sau dấu chấm phẩy không được yêu cầu bởi cú pháp cho bất kỳ trình bao nào mà tôi biết, nhưng đó là phong cách tốt và làm cho mã dễ đọc hơn.

Tôi cho rằng cụm từ "đôi khi cần được thoát" đề cập đến các trường hợp như echo foo\;bar, nơi bạn không muốn dấu chấm phẩy được diễn giải là dấu phân cách bởi trình bao.

0

Tôi không tin rằng không gian cần thiết ở đó. Không có gì về yêu cầu không gian trong POSIX sh spec.

Theo kinh nghiệm, các công việc sau tốt trong cả hai bash 4.1.5 (1) và dash:

$ if true;then echo hi;else echo bye;fi 
hi 
$ 
5

chấm phẩy ; là một hành (không phải là một từ khóa , như niềng răng { } hoặc một tiếng nổ !) trong Shell, do đó, nó không cần phải được phân tách bằng khoảng trắng để được nhận diện trong bất kỳ shell tuân thủ POSIX nào.

Tuy nhiên, làm như vậy sẽ cải thiện khả năng đọc (đối với sở thích của tôi).

Dấu chấm phẩy cần phải được thoát nếu bạn ngụ ý một biểu tượng "dấu chấm phẩy", không phải là toán tử.

0

Tôi chưa bao giờ bắt gặp một trình bao yêu cầu không gian trong ngữ cảnh đó. Chỉ cần đảm bảo, tôi đã hỏi trên c.u.s., bạn có thể đọc câu trả lời here.

Các vấn đề liên quan