所以我有一个 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"