2015-04-28 54 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技巧,所以它應該很容易適應。 –