2015-04-28 26 views
0

我想这样运行命令:如何在终端提示符(bash)中使用变量来修改文件名?

$ valgrind --leak-check=full ./program < speed-01.in 

我已经得到了一些测试像这样的具有不同后缀的相似-02-03等结束。

代替书面方式bash脚本的,我想通过一个运行这些测试之一,而chaning只有最后一个数字是这样的:

$ valgrind --leak-check=full ./program < speed-0${A}.in ${A}=1 

然而,现在看来似乎是不引入变量的正确方法在这种情况下。

我的问题是:如何在这种情况下使用变量?甚至有可能以这样的方式写出整个想法确实有意义吗?

+0

为什么要遍历数字,而不是查看文件系统上存在哪些文件? –

+0

@RC,不是没有';'或换行符。 –

+0

@CharlesDuffy是的,我正在尝试一个外壳,看到了。感谢修正 –

回答

3
for f in speed-*.in; do 
    valgrind --leak-check=full ./program <"$f" 
done 

...或者,如果你真的出于某种原因算号...

for ((a=0; a<9; a++)); do 
    printf -v num '%02d' "$a" # add a leading 0 only if number is less than 10 
    valgrind --leak-check=full ./program <"speed-${num}.in" 
done 

现在,如果你想很容易地运行此用不同的值手动定义一个函数:

leakcheck() { 
    local num 
    printf -v num '%02d' "$1" 
    valgrind --leak-check=full ./program <"speed-${num}.in" 
} 

...然后你可以运行...

leakcheck 1 
leakcheck 2 
... 
+0

用于完全抛弃printf的循环的替代方法就像“用于num中的{00..09}; do ....” – RTLinuxSW

0

另一种方式,使用您的例子是

A=1 
valgrind --leak-check=full ./program < speed-0$((A++)) 

然后,重复最后一行高达9次。

例如,如果您想要01..12,这会变得更加复杂。

+0

...尽管正确处理01 ... 12的代码是我已经演示的,与printf技巧,所以它应该很容易适应。 –