我多年来一直在 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 个文件名,但我认为我只需要让它与两个一起工作,因此它能够处理很多。
如果您正在使用bash,请考虑以 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。