在bash中截断的浮点数作为变量文件名

在bash中截断的浮点数作为变量文件名,bash,filenames,Bash,Filenames,我想对所有名为“r?.txt”的文件执行for循环,其中?。???是从0.000到3.999的浮动。但是,据我所知,bash没有整数。。。这会让人头疼 我试着用两个变量来表示十进制前后的数字,来完成单调乏味的for循环。但是,如果您有?.00?,我仍然需要插入零?。因此,我需要正确处理浮点数以及如何存储/输出它们 总之,我面临两个问题 在bash中做float 以值形式浮动并传递到文件名的输出 谢谢。使用两个变量是个好主意 您可以使用seq-f选项保持零填充格式: #!/bin/bash dec

我想对所有名为“r?.txt”的文件执行for循环,其中?。???是从0.000到3.999的浮动。但是,据我所知,bash没有整数。。。这会让人头疼

我试着用两个变量来表示十进制前后的数字,来完成单调乏味的for循环。但是,如果您有?.00?,我仍然需要插入零?。因此,我需要正确处理浮点数以及如何存储/输出它们

总之,我面临两个问题

  • 在bash中做float
  • 以值形式浮动并传递到文件名的输出

  • 谢谢。

    使用两个变量是个好主意

    您可以使用seq-f选项保持零填充格式:

    #!/bin/bash
    declare -i int=3;
    declare -i dec=1000;
    
    for i in $(seq 1 $int);do
            for j in $(seq -f "%03g" 1 $dec);
                    do echo r$i.$j.txt;  # or do find . -name "r$i.$j.txt";
            done;
    done;
    
    回答1)对于浮点计算,您必须将任务委托给其他程序,如bc

    例如:

    echo”刻度=3;20.8/4 | bc
    5.200

    有关更多选项,您可以检查:



    要查找具有浮点数的文件名,可以使用正则表达式和
    find
    命令:

    $touch r3.987.txt
    $find.-regextype sed-regex“*/r[0-9]\.[0-9]\{3\}.txt$”
    ./r3.987.txt

    正则表达式类型为sed,find.means在当前目录中查找

    • */=>仅检查文件名并跳过前导目录结构

    • [0-9]匹配0到9范围内的任何数字

    • \.表示匹配一个点

    • [0-9]\{3\}表示[0-9]{3}精确匹配3个数字,每个数字可以在0-9范围内

    • 最后以
      .txt

    对于答案2),您可以通过循环find命令的输出来获得作为字符串的浮点值

    $for filename in "$(find . -regextype sed -regex ".*/r[0-9]\.[0-9]\{3\}.txt$")"  
    > do  
    > echo "Filename is $filename"  
    > floatValueAsString=$(echo "$filename" | egrep -o '[0-9]\.[0-9]{3}')  
    > echo "Float value as string is $floatValueAsString"  
    > done  
    Filename is ./r3.987.txt
    Float value as string is 3.987
    

    处理2个整数有什么问题?
    在{0..3}中处理a;在{000..999}中处理b;执行echo“r$a.$b.txt”;完成;完成
    。耶,你是对的。。。