gpt4 book ai didi

arrays - 从 bash 中的输入文件中读取数组

转载 作者:行者123 更新时间:2023-11-29 09:12:39 25 4
gpt4 key购买 nike

我正在尝试清理我为在 bash(版本 4.2.46)中的数组中的文件上运行一些程序而编写的一些代码。在我正在清理的脚本中,我使用一个数组,其中文件名作为键,它们的相对路径作为值(我知道下面的代码中没有扩展名,这些是由程序单独假设和/或添加的)。这个数组可能会变得非常大,因此我想将它与我的其余代码分开,以提高程序的可读性。

我目前用来读取输入文件的脚本如下:

#!/bin/bash

mapfile -t FILE <$1

declare -A fileArray

while read line; do
key=$(cut -d'=' -f1 <<< $line)
value=$(cut -d'=' -f2 <<< $line)
fileArray[$key]=$value
echo "Key $key : Value ${fileArray[$key]}"
done <$1

echo "all keys : ${!fileArray[@]}"

这需要一个输入文件,读取行,在定界符“=”处剪切它,将结果字符串作为键和值传递给 MyArray,最后回显 myArray 的键和值以检查数组是否实际用作预期的。它是做什么的。输入文件包含以下文本(灰色):

foo_bar1=foo1/foo_bar1
foo_bar2=foo2/foo_bar2
foo_bar3=foo3/foo_bar3

但是,输入文件不是数组,我找不到能够从输入文件中读取数组而不使用行作为值而不是行的第一部分作为键和第二部分的包部分作为属于该键的值。我希望输入文件看起来像下面的文本(灰色),如果这意味着我不必逐行显式解析文件。

#!/bin/bash
declare -A fileArray=(
[foo_bar1]='foo1/foo_bar1'
[foo_bar2]='foo2/foo_bar2'
[foo_bar3]='foo3/foo_bar3'
)

你能帮我清理一下用于解析数组的 miniscript 还是给我指点一个为我做这件事的包?

提前致谢。

编辑:我发现 source可以从输入文件中读取数组(和任何其他变量),而无需明确地解析它。这会产生以下脚本,作为 myScript.sh input.sh 运行:

#!/bin/bash
source $1
declare -p fileArray

事后看来,这正是我要找的。

最佳答案

如果我理解您的要求,拆分 line 的权利到键和值并直接使用它们,您可以将自定义分隔符与 IFS 一起使用通过将其设置为 =并读取两个值来设置它

#!/usr/bin/env bash

declare -A fileArray

# Setting IFS value as '=' to delimit read on this character
while IFS== read -r key value; do
fileArray["$key"]="$value"
done < file

declare -p fileArray

它产生如下输出,我希望这是你想要做的。

declare -A fileArray=([foo_bar2]="foo2/foo_bar2" [foo_bar3]="foo3/foo_bar3" [foo_bar1]="foo1/foo_bar1" )

关于arrays - 从 bash 中的输入文件中读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49626708/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com