0

假设我有一些文件,例如:

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 脚本。

4

1 回答 1

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
于 2013-08-01T11:21:41.963 回答