【问题标题】:Using a variable name to create an array bash, unix使用变量名创建数组bash、unix
【发布时间】:2011-10-14 09:37:52
【问题描述】:

首先我应该解释一下我想做什么......

  • 我有 'n' 个文件,其中有 'n' 个行。我只知道 行数将是偶数。
  • 用户选择他们想要的文件。这被保存到一个 数组名为${selected_sets[@]}
  • 程序将打印以筛选随机选择的“奇数” 随机选择的文件中的行。
  • 一旦打印了该行,我就不想再打印它了...

大部分都很好,但是我无法根据 ${selected_sets[@]} 的内容创建数组...我想我的语法全错了 :)

for i in ${selected_sets[@]}
do 
    x=1
    linecount=$(cat $desired_path/$i | wc -l) #get line count of every set

        while [ $x -le $linecount ] 
        do ${i}[${#${i}[@]}]=$x
        x=$(($x+2)) # only insert odd numbers up to max limit of linecount
        done
done

问题是${i}[${#${i}[@]}]=$x 我知道我可以使用array[${#array[@]}]=$x,但我不知道如何使用变量名。

欢迎任何想法(我真的很难过)!!!

【问题讨论】:

  • 为什么要命名变量?如果您想稍后再次访问这些数组,可以将它们存储在一个双下标数组中,您可以在 for 循环之外声明它。
  • 我只使用了大约一周的 bash 数组,所以我的推理是基于这样一个事实,即我认为这将是实现我想要的最佳方式......双下标数组是新的对我来说......我会给他们一个阅读,看看他们是否按照我的意愿行事。感谢您的提醒!
  • P.S - 知道在线文档吗?
  • 我喜欢使用ss64.com/bash 解决我的大部分 bash 问题。

标签: arrays bash shell unix dynamic


【解决方案1】:

一般来说,这种类型的问题是用 eval 解决的。如果你想要一个名为“foo”的变量并且有一个变量 bar="foo",你只需这样做:

评估 $bar=5

Bash(或任何 sh)将其视为您已键入

富=5

所以你可能只需要写:

评估 ${i}[\${#${i}[@]}]=$x

有合适的转义。 (一种有用的技术是将 'eval' 替换为 'echo',运行脚本并检查输出并确保它看起来像您想要评估的内容。)

【讨论】:

    【解决方案2】:

    您可以使用declare 命令创建命名变量

    declare -a name=${#${i}[@]}
    

    我只是不确定您将如何引用这些变量,我现在没有时间调查。

    使用数组:

    declare -a myArray
    
    for i in ${selected_sets[@]}
    do 
    x=1
    linecount=$(cat $desired_path/$i | wc -l) #get line count of every set
    
        while [ $x -le $linecount ] 
        do
        $myArray[${#${i}[@]}]=$x
        let x=x+1 #This is a bit simpler!
        done
    done
    

    小心!我没有测试以上任何一个。高温

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 2014-04-21
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2020-10-10
      相关资源
      最近更新 更多