如何在单独的行上将两个回显输出到文本文件

如何在单独的行上将两个回显输出到文本文件

所以我有一个 shell 脚本math.sh,它接受一个数字作为参数,并回显添加一个数字并从中减去一个数字:

#!/bin/bash

echo "Add: "$(($1 + 1))
echo "Subtract : "$(($1 - 1))

我的另一个 shell 脚本execute.sh基本上是将 math.sh 和一个文本文件作为参数,并将 math.sh 的输出写入文本文件。

#! /bin/sh
echo $1 > $2

但是,两个回声在同一行上输出到文本文件: Add: $(($1 ++))Subtract :$(($1 --)) 当我需要在不同的行上使用它时,例如:

添加:$(($1++))

减去:$(($1 --))

在不编辑 math.sh 的情况下我该如何做到这一点?因为我的execute.sh需要能够将任何shell脚本输出到文本文件,而不仅仅是math.sh,在单独的行上。

答案1

问题是缺少引号,应该是:

#!/bin/sh
echo "$1" > "$2"

这是必需的,因为否则 bash 将处理变量内的任何特殊字符,例如空格、换行符、星号 (*) 等。

在这种情况下,换行符将参数分解为多个参数,导致echo用空格将它们连接起来。


请注意,这是将第一个参数本身打印到文件中。

要打印内容你们中的一些$1人会这样做:

#!/bin/sh
cat "$1" > "$2"

打印输出你们中的一些$1人会这样做:

#!/bin/sh
./math.sh "$1" > "$2"

如果您还希望变量的更改反映在当前脚本中,您可以使用它:

#!/bin/sh
. "$1" > "$2"

相关内容