在每个文件的子字符串上运行命令

gca*_*dal 0 bash

假设我有一些文件:

samplea.txt
sampleb.txt
samplec.txt
Run Code Online (Sandbox Code Playgroud)

我想用这个表单运行一些命令:

./cmd -foo a.xml -bar samplea.txt
Run Code Online (Sandbox Code Playgroud)

首先,我试过

for file in "./*.txt"
do
    echo -e $file
done
Run Code Online (Sandbox Code Playgroud)

但是这样它会以直线打印每个文件.通过尝试:

echo -e $file\n
Run Code Online (Sandbox Code Playgroud)

它不会产生预期的(每个文件的单行).甚至无法通过问题的第一部分,即在每个文件上运行命令(可以通过find(...)-exec实现),但我真正想做的是提取子串每个名字.

这样做:

echo ${file:1}
Run Code Online (Sandbox Code Playgroud)

因为我只能在分割文件名后才能这样做,从每个文件名中获取"a","b","c".

如果这听起来令人困惑,我很抱歉,但这是我的第一个bash脚本.

cho*_*oba 6

不要引用通配符表达式.您可以使用参数扩展来删除字符串的一部分:

for file in sample*.txt ; do
    part=${file#sample}                 # Remove "sample" at the beginning.
    part=${part%.txt}                   # Remove ".txt" at the end.
    ./cmd -foo "$part".xml -bar "$file"
done
Run Code Online (Sandbox Code Playgroud)