2013-07-12 35 views
49

Đây có lẽ là một câu hỏi rất cơ bản nhưng vì một lý do nào đó tôi dường như đang tìm kiếm sự rõ ràng.nội suy thay đổi trong vỏ

Tôi có một biến gọi là filepath=/tmp/name

Để truy cập vào biến tôi biết rằng tôi có thể làm điều này $filepath

Trong shell script của tôi, tôi đã cố gắng để làm một cái gì đó như thế này (The ve lại nhằm mục đích)

`tail -1 $filepath_newstap.sh` 

Dòng này không thành công, duuh! vì biến số này không được gọi là $filepath_newstap.sh

Làm cách nào để nối thêm _newstap.sh vào tên biến? Xin lưu ý rằng ve lại được dành cho việc đánh giá biểu hiện

Trả lời

102

Sử dụng

"$filepath"_newstap.sh 

hoặc

${filepath}_newstap.sh 

hoặc

$filepath\_newstap.sh 

_ là ký tự hợp lệ trong số nhận dạng. Dot không phải là, vì vậy vỏ đã cố gắng để nội suy $filepath_newstap.

Bạn có thể sử dụng set -u để thoát khỏi trình bao với lỗi khi bạn tham chiếu biến không xác định.

+4

Có lẽ cũng đề cập đến' set -u' khiến kịch bản bị hủy nếu bạn tham chiếu biến không xác định. – tripleee

+0

@tripleee: Đã cập nhật, cảm ơn. – choroba

+0

Sự khác nhau giữa việc sử dụng '$ {}' và dấu nháy kép là gì? Tôi có nên thích cái này hơn cái kia không? – user31389

10

Sử dụng dấu ngoặc nhọn xung quanh tên biến:

`tail -1 ${filepath}_newstap.sh` 
+1

Anh không cần dấu ngoặc kép? – michaelsnowden

+0

@michaelsnowden Không nhất thiết. Để được an toàn, có, nhưng câu hỏi một cách rõ ràng tuyên bố một con đường không có không gian và tiếp tục cho rằng những rắc rối là '$ filepath_newstap.sh' được hiểu là' $ {filepath_newstap} .sh' chứ không phải là dự định '$ {filepath} _newstap .sh', điều này sẽ giải quyết được vấn đề. –

+0

Tôi không tin đó là sự thật: http://stackoverflow.com/a/6697781/2770572 – michaelsnowden

3

Trong bash: tail -1 ${filepath}_newstap.sh