Linux 将数组拆分为单独的变量

Linux 将数组拆分为单独的变量

我已经在 MVS 上编程多年,最近一直在使用 Linux,所以我的 Linux 技能还不是很好,但我很好地理解开发概念。

我想做的是读取文件目录并获取扩展名为 .trg 的所有文件的名称。然后,我需要获取这些名称并将它们存储在单独的变量中,以便稍后在脚本中使用它们来引用组件并将它们用于文件命名。我已经使用 find 命令获取了文件名:

param=`find *${file_name}*.trg

这生成了加载了值 (ABC1099R ABC1099C) 的 $param 变量,因为它们是名为 ABC1099R.trg 和 ABC1099C.trg 的目录中的两个文件,我现在需要将这些值分配给各个变量,以便稍后在脚本中使用它们。我在网上搜索过很多次,但我找到的每个例子都是使用 echo 来显示它们,或者它们使用 do while 循环并使用循环中的各个值。我需要将它们分配给自己的变量,以便我稍后在脚本中可以使用它们。

最初我尝试了这样的 for do 循环:

for trigger_files in $param; do
    app1=(basename "{trigger_files}" .trg).dat
done

但这只给出了第一次出现 app1=ABC1099R

我需要将所有出现的情况保存到它们自己的单独变量中。可能有 20 个文件名,但我想我只需要让它与两个文件名一起工作,因此它能够处理很多文件名。

答案1

如果您正在使用,请考虑以 bash 方式进行。

您的数组将由此获得(无外部find命令):

params=( *${file_name}*.trg )

然后像这样循环遍历数组:

for file in "${params[@]}"; do
    echo "I'm happily reading the beautiful file $file"
done

如果您想删除.trg扩展并将其替换为.banana

for file in "${params[@]}"; do
    echo "My gorilla loves the file ${file%.trg}.banana"
done

这种方法,加上正确的引用,对于名称中带有有趣符号的文件来说将是 100% 安全的。

评论。始终将通配符与shopt -s nullglob或一起使用shopt -s failglob

答案2

您可以将 param 声明为数组而不是字符串:

declare -a param=(`find *${file_name}*.trg`)

现在,您可以使用索引访问各个值,就像它们位于各个变量一样。例如:

echo ${param[1]}

将打印ABC1099C.trg(数组中的第二个元素。索引从 0 开始)。

如果你想去掉文件扩展名,你可以尝试${param[1]%.*}

要了解有关数组的更多信息,请查看此处:

相关内容