使用折叠命令后从数据创建变量

问题描述 投票:0回答:1

我的主要目标是设置从不同长度的字符串中获取的变量。每个变量必须包含字符串中的 4 位数字(即

var_1 =
数字 1-4、
var_2 =
数字 5-8 等)。通过使用
fold -w4
命令,我可以将字符串分成 4 个块。 例如:

string = 1234567898765432
fold -w4:
1234
5678
9876
5432

除了通过复制数据手动创建变量之外,任何人都可以建议我如何让 Bash 为创建的每个 4 块自动创建变量吗?

我搜索过 Google,甚至尝试过 ChatGPT。给出的建议似乎不起作用:

# Get the length of the input string
    length=${#input_string}

# Loop through the string in steps of 4 characters
    for (( i=0; i<$length; i+=4 )); do
        # Extract 4 characters starting from position i
        substring="${input_string:i:4}"

        # Create a variable with the extracted substring
        var_name="var_$((i/4 + 1))"
        declare "$var_name=$substring"
    done

# Print the created variables
    echo "Created variables:"
    declare -p | grep -E '^declare -\w+ var_[0-9]+='

所发生的只是我将“创建的变量”写入终端。

bash fold
1个回答
1
投票

通常的方法是创建一个条目数组,可以使用

mapfile
(或
readarray
-
mapfile
的同义词)轻松完成;在这种情况下,我们还将使用流程替换将
fold
结果提供给
mapfile
,例如:

$ string=1234567898765432
$ mapfile -t arr < <(fold -w4 <<< "${string}")
$ typeset -p arr
declare -a arr=([0]="1234" [1]="5678" [2]="9876" [3]="5432")

chatGPT 答案有效,只是脚本的最后一行 (

declare -p | grep -E ...
) 是错误的。最后一行的替代方案:

$ declare -p | grep 'var_'
declare -- var_1="1234"
declare -- var_2="5678"
declare -- var_3="9876"
declare -- var_4="5432"
declare -- var_name="var_4"           # probably don't want to see this one

$ declare -p | grep -E ' var_[0-9]+='
declare -- var_1="1234"
declare -- var_2="5678"
declare -- var_3="9876"
declare -- var_4="5432"
© www.soinside.com 2019 - 2024. All rights reserved.