在bash中将其他命令输出与echo连接

时间:2015-04-27 13:49:23

标签: bash shell

这是我目前的代码:

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

它只包含我的文件名而不是执行结果。

任何修复建议?提前谢谢。

3 个答案:

答案 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},但这是一个很好的习惯,可以提高代码的整体稳健性。