假设我有一些文件:
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脚本.
不要引用通配符表达式.您可以使用参数扩展来删除字符串的一部分:
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)