当前位置: 首页 > 面试题库 >

如何在Shell脚本中动态生成新的变量名?

朱高丽
2023-03-14
问题内容

我正在尝试在Shell脚本中生成动态var名称,以在循环中如下处理一组具有不同名称的文件:

#!/bin/bash

SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'

for (( i = 1; i <= 2; i++ ))
do
  echo SAMPLE{$i}
done

我期望输出:

1-first.with.custom.name
2-second.with.custom.name

但我得到了:

SAMPLE{1}
SAMPLE{2}

是否可以即时生成var名称?


问题答案:

您需要利用变量间接:

SAMPLE1='1-first.with.custom.name'
SAMPLE2='2-second.with.custom.name'

for (( i = 1; i <= 2; i++ ))
do
   var="SAMPLE$i"
   echo ${!var}
done

在Bash手册页的 “参数扩展”下:

“如果参数的第一个字符是感叹号(!),则会引入变量间接级别。Bash使用从参数其余部分形成的变量的值作为变量的名称;然后对该变量进行扩展,然后在替换的其余部分中使用value,而不是参数本身的值。这称为间接扩展。”



 类似资料:
  • 拉斯宾(杰西)-root@RaspberryPi-腻子 在我输入的终端中 现在我得到了一个包含此代码的脚本 有一个cronjob每小时启动一次这个脚本 苏。一定有什么地方出错了。因为他将变量$finalanswer解读为nothing。 这意味着在此脚本之外定义的变量将不起作用? 我该如何解决这个问题?

  • 问题内容: 我已经成功运行了几个Python脚本,并使用subprocess模块​​从基本脚本中调用了它们: 但是,每个脚本都执行一些模拟(来自C ++应用程序的.exe文件),这些模拟会生成一些输出到外壳程序。所有这些输出都从启动这些脚本的位置写入基本shell。我想为每个脚本生成一个新的shell。我试图在调用subprocess.call时使用该属性生成新的shell (也尝试过popen)

  • 问题内容: 我想将要在以后使用的命令存储在变量中(不是命令的输出,而是命令本身) 我有一个简单的脚本,如下所示: 但是,当我尝试更复杂的操作时,它会失败。例如,如果我做 输出为: 知道如何将这样的命令(带有管道/多个命令)存储在变量中以备后用吗? 问题答案: 使用eval:

  • 我想在我的shell脚本中使用mysql语法和变量,我用错了什么? 我正在尝试将其作为./test.sh运行

  • 问题内容: 假设我在Jenkins中有一个Groovy脚本,其中包含多行shell脚本。如何在该脚本中设置和使用变量?正常方式会产生错误: 捕获:groovy.lang.MissingPropertyException:否这样的属性:foo对于类:groovy.lang.Binding 问题答案: 您需要更改为三重单引号或转义美元 然后,您将跳过常规模板,这就是给您这个问题的原因

  • 问题内容: 是否可以在Java中动态创建新变量。 因此,如果两次调用了新方法,是否应该向该类中新添加2个新变量? 可能吗? 问题答案: 否。您是否考虑过在课程中存储“ a ”?映射中的键将是“变量名”,映射中的值将是逻辑变量名。 如果您可以提供有关您要实现的目标的更多信息(从高角度来看),那将有所帮助。