这是我目前的代码:
for j in {1..10}
do
echo $j ./gcc-$j.out >> gcc-result.txt
done
我想用前缀执行每个.out文件并将它们输出到txt文件中。
每个.out文件输出只有一行,我的输入是:
gcc-1.out
gcc-2.out
gcc-3.out
gcc-4.out
gcc-7.out
gcc-8.out
gcc-result.txt
中的预期输出是:
1someoutput
2someoutput
3someoutput
4someoutput
7someoutput
8someoutput
我当前的代码不能满足我的要求,我目前的输出是:
1 ./gcc-1.out
2 ./gcc-2.out
3 ./gcc-3.out
4 ./gcc-4.out
7 ./gcc-7.out
8 ./gcc-8.out
它只包含我的文件名而不是执行结果。
任何修复建议?提前谢谢。
答案 0 :(得分:1)
两种解决方案:
for j in {1..10} do
echo -n $j >> gcc-result.txt
./gcc-$j.out >> gcc-result.txt
done
-n阻止echo进行换行。你也可以这样做:
for j in {1..10} do
echo $j `./gcc-$j.out` >> gcc-result.txt
done
backqoutes意味着将附带的文本作为命令运行,并将输出用作字符串。
答案 1 :(得分:0)
尝试这样的事情(如果我正确理解你的需要......):
for i in {1..10}
do
echo -n ${i}`gcc-$i.out` >> gcc-result.txt
done
答案 2 :(得分:0)
for j in {1..10}
do
{ echo -n "$j"; cat "gcc-${j}.out"; } >> gcc-result.txt
done
这假设您希望将变量j
的内容与文件gcc-$j.out
的内容连接起来。
如果按顺序写入同一个流,则您编写的内容会自动连接(自然)。
所以你可以:
echo -n "$j" >> gcc-result.txt
cat "gcc-${j}.out" >> gcc-result.txt
或者通过将命令分为括号(()
)(分叉子壳)或花括号({}
)来执行干燥(DRY =不要重复自己)(执行中)相同的shell)并重定向整个组的输出,如建议的解决方案所示。
从技术上讲,您不需要引号和${j}
,但这是一个很好的习惯,可以提高代码的整体稳健性。