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

use*_*228 4 linux find

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

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

param=`find *${file_name}*.trg
Run Code Online (Sandbox Code Playgroud)

这产生了加载了值 (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
Run Code Online (Sandbox Code Playgroud)

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

我需要将所有事件保存到他们自己的个人变量中。可能有 20 个文件名,但我认为我只需要让它与两个一起工作,因此它能够处理很多。

gni*_*urf 9

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

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

params=( *${file_name}*.trg )
Run Code Online (Sandbox Code Playgroud)

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

for file in "${params[@]}"; do
    echo "I'm happily reading the beautiful file $file"
done
Run Code Online (Sandbox Code Playgroud)

如果要删除.trg扩展名并将其替换为.banana:

for file in "${params[@]}"; do
    echo "My gorilla loves the file ${file%.trg}.banana"
done
Run Code Online (Sandbox Code Playgroud)

对于名称中带有有趣符号的文件,此方法通过正确引用将是 100% 安全的。

评论。始终使用带有shopt -s nullglob或 的通配符shopt -s failglob。