通过循环(bash)创建变量并赋值

tox*_*efa 13 shell bash shell-script

有没有办法创建 bash 变量并通过循环为它们赋值?

类似的东西:

#!/bin/bash

c=0
for file in $( ls ); do
    var"$c"="$file";
    let c=$c+1;
done
Run Code Online (Sandbox Code Playgroud)

编辑:感谢@Costas 和@mdpc 指出这将是一个糟糕的列表替代方案;这个问题只是理论上的。

Bic*_*hoy 15

好吧,你绝对可以使用eval如下:

c=0
for file in $( ls ); do
    eval "var$c=$file";
    c=$((c+1));
done
Run Code Online (Sandbox Code Playgroud)

这段代码将创建名为 var0, var1, var2, ... 的变量,每个变量都保存文件名。我假设你有一个很好的理由想要通过使用数组来做到这一点......


Cos*_*tas 6

可能你的意思是数组。有一些方法可以赋值

第一的:

c=0
for file in $( ls ); do
    var[$c]="$file";
    c=$(($c+1));
done
Run Code Online (Sandbox Code Playgroud)

第二:

c=0
for file in $( ls ); do
    var[c++]="$file";
done
Run Code Online (Sandbox Code Playgroud)

第三:

for file in $( ls ); do
    var[${#var}]="$file";
done
Run Code Online (Sandbox Code Playgroud)

第四:

var=( $(ls) )
Run Code Online (Sandbox Code Playgroud)

第五

...

  1. 没有必要使用ls,只需放入*所有文件
  2. 里面[]$标志可中省略