我对bash脚本感到困惑.
我有以下代码:
function grep_search() {
magic_way_to_define_magic_variable_$1=`ls | tail -1`
echo $magic_variable_$1
}
Run Code Online (Sandbox Code Playgroud)
我希望能够创建一个包含命令的第一个参数并带有例如最后一行的值的变量名ls.
所以说明我想要的东西:
$ ls | tail -1
stack-overflow.txt
$ grep_search() open_box
stack-overflow.txt
Run Code Online (Sandbox Code Playgroud)
那么,我应该如何定义/声明$magic_way_to_define_magic_variable_$1以及如何在脚本中调用它?
我已经试过eval,${...},\$${...},但我仍然感到困惑.
我正在读" Bash初学者指南 ".它说:
如果第一个字符
PARAMETER是感叹号,则Bash使用由其余部分形成的变量的值作为变量PARAMETER的名称; 然后展开此变量,并将该值用于替换的其余部分,而不是其PARAMETER自身的值.这被称为间接扩张.
给出的例子是:
Run Code Online (Sandbox Code Playgroud)franky ~> echo ${!N*} NNTPPORT NNTPSERVER NPX_PLUGIN_PATH
我在这里不太明白:
从其余部分形成的变量的值
PARAMETER
由于PARAMETER是刚刚!N*的话
其余的
PARAMETER
只是N*.怎么会形成一个变量?Bash在那里搜索了所有可能的命令吗?
我想声明一个变量,其名称来自另一个变量的值,我编写了以下代码:
a="bbb"
$a="ccc"
Run Code Online (Sandbox Code Playgroud)
但它不起作用.完成这项工作的正确方法是什么?
我有变量$foo="something",想使用:
bar="foo"; echo $($bar)
Run Code Online (Sandbox Code Playgroud)
让某些东西得到回应.
我想将变量命名为a_${v}.
例如:v可以是2013 2014
我现在声明一个变量 a_${v}
a_${v}=hI # a_2013 should be Hi
v=2014
Run Code Online (Sandbox Code Playgroud)
所以a_${v}=Hello # a_2014应该是你好
我尝试使用eval命令,虽然它在分配值时没有抛出错误,但我无法提取变量名的值
$ v=2013
$ eval a_${v}=Hi
$ v=2014
$ eval a_${v}=Hello
echo ${a_${v}}
Run Code Online (Sandbox Code Playgroud)
不管用.. :(
我正在使用bash,我不想更改变量名,即不想将值赋给另一个值