2012-01-17 31 views
17

ý nghĩa của một biến bash sử dụng như thế này là gì:

${Server?} 

Trả lời

23

Nó hoạt động gần như giống nhau như (từ bash manpage):

${parameter:?word}
Display Error if Null or Unset. If parameter is null or unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

Đó biến thể cụ thể kiểm tra để đảm bảo biến tồn tại s (được định nghĩa và không null). Nếu có, nó sẽ sử dụng nó. Nếu không, nó sẽ xuất ra thông báo lỗi được chỉ định bởi word (hoặc phù hợp nếu không có word) và chấm dứt tập lệnh.

Sự khác biệt thực sự giữa đó và phiên bản không-ruột có thể được tìm thấy trong bash manpage trên phần trích dẫn:

Khi không thực hiện mở rộng chuỗi, bằng cách sử dụng các hình thức tài liệu dưới đây, bash thử nghiệm cho một tham số không được đặt hay không. Bỏ qua kết quả đại tràng trong một thử nghiệm chỉ cho một tham số không được đặt.

Nói cách khác, phần trên có thể được sửa đổi để đọc (về cơ bản lấy ra các bit "null"):

${parameter?word}
Display Error if Unset. If parameter is unset, the expansion of word (or a message to that effect if word is not present) is written to the standard error and the shell, if it is not interactive, exits. Otherwise, the value of parameter is substituted.

Sự khác biệt là minh họa như vậy:

pax> unset xyzzy ; export plugh= 

pax> echo ${xyzzy:?no} 
bash: xyzzy: no 

pax> echo ${plugh:?no} 
bash: plugh: no 

pax> echo ${xyzzy?no} 
bash: xyzzy: no 

pax> echo ${plugh?no} 

pax> _ 

Ở đó, bạn có thể thấy rằng trong khi cả hai đều không đặt kết quả là biến không có lỗi với :?, chỉ có một lỗi không được đặt với ?.

+0

Và không có từ, có thông báo lỗi mặc định "tham số null hoặc không được đặt" (cùng một thông báo có hoặc không có dấu hai chấm). –

10

Nó có nghĩa là kịch bản nên hủy bỏ nếu biến không được định nghĩa

Ví dụ:

#!/bin/bash 
echo We will see this 
${Server?Oh no! server is undefined!} 
echo Should not get here 

Kịch bản này sẽ in ra tiếng vang đầu tiên, và thông báo lỗi "Oh no! ...".

Xem tất cả các thay biến cho bash đây: http://tldp.org/LDP/abs/html/parameter-substitution.html

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