2014-12-16 16 views

Trả lời

3

Những gì bạn muốn được gọi là variable expansion (hoặc mở rộng gián tiếp). Bạn phải sử dụng cú pháp ${!var}:

~$ cat s.sh 
var1="test" 
var2="script" 
echo ${!1} 
~$ ./s.sh var1 
test 
~$ ./s.sh var2 
script 

Từ man bash:

${parameter}

Giá trị của tham số được thay thế. Niềng răng được yêu cầu khi tham số là một tham số vị trí có nhiều hơn một chữ số, hoặc khi tham số được theo sau bởi một ký tự không được hiểu là một phần của tên của nó.

Nếu ký tự đầu tiên của tham số là dấu chấm than (!), Thì mức giới hạn biến được giới thiệu. Bash sử dụng giá trị của biến được tạo thành từ phần còn lại của tham số như tên của biến; biến này sau đó được mở rộng và giá trị đó được sử dụng trong phần còn lại của thay thế, thay vì giá trị của tham số. Điều này được gọi là mở rộng gián tiếp. Các ngoại lệ cho điều này là các mở rộng của $ {! Prefix *} và $ {! Name [@]} được mô tả bên dưới. Dấu chấm than phải ngay lập tức theo dấu ngoặc nhọn để giới thiệu sự vô hướng.

+2

Lệnh '$' và '$ 'mở rộng không thực sự phù hợp với mục tiêu ở đây {prefix *!} {Tiền tố @!}. –

+0

@EtanReisner Thật vậy ... tôi mặc dù vậy, ví dụ, 'echo $ {! Var1}' và 'echo $ {! Var1 *}' cả hai sẽ lặp lại 'test' – fredtantini

+0

Mở rộng' $ {! Prefix *} 'mở rộng thành biến tên không phải là giá trị. Bạn có thể sử dụng những tên đó trong bản mở rộng gián tiếp mặc dù để có được các giá trị. –

0

Bạn có thể làm điều này:

$ foo='bar' 
$ baz='foo' 
$ echo ${!baz} 
bar 
Các vấn đề liên quan