Tôi muốn sử dụng đầu ra của lệnh echo làm tên biến. Giống như,Sử dụng đầu ra của lệnh shell làm biến số
var1="test"
var2="script"
echo ${$1}
Nếu $1
là var1 echo nên in thử nghiệm.
${$1}
ném lỗi "thay xấu"
Tôi muốn sử dụng đầu ra của lệnh echo làm tên biến. Giống như,Sử dụng đầu ra của lệnh shell làm biến số
var1="test"
var2="script"
echo ${$1}
Nếu $1
là var1 echo nên in thử nghiệm.
${$1}
ném lỗi "thay xấu"
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.
Bạn có thể làm điều này:
$ foo='bar'
$ baz='foo'
$ echo ${!baz}
bar
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ố @!}. –
@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
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ị. –