假设我有一些文件:
samplea.txt
sampleb.txt
samplec.txt
我想用这种形式运行一些命令:
./cmd -foo a.xml -bar samplea.txt
首先我试过
for file in "./*.txt"
do
echo -e $file
done
但是这样它会以直线打印每个文件。通过尝试:
echo -e $file\n
它不会产生预期的(每个文件的单行)。 甚至无法通过问题的第一部分,即在每个文件上运行命令(可以通过find(...)-exec实现),但我真正想做的是提取子串每个名字。
这样做的:
echo ${file:1}
不起作用,因为我只能在分割文件名后才能这样做,从每个文件名中获取“a”,“b”,“c”。
如果这听起来令人困惑,我很抱歉,但这是我的第一个bash脚本。
答案 0 :(得分: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