在脚本中使用 source 命令,但在终端的命令行中定义输入文件

在脚本中使用 source 命令,但在终端的命令行中定义输入文件

我现在有一个脚本,它读取变量,然后对它们进行操作,如下所示;

#!bin/bash
a=10
b=15
c=20

d=a*b+c
echo $d

但是我想将其分成一个输入文件,其中包含:

a=10
b=15
c=20

和执行操作的脚本

#!/bin/bash
d=a*b+c
echo $d

并且会被调用类似这样的东西。

./script.sh < input.in

现在我已经做了一些挖掘,并尝试做一个简单的。

./script.sh < input.in

这样它就会返回答案 170

但这行不通。经过进一步挖掘,似乎在脚本中需要使用命令“source”,但我不确定在这种情况下该怎么做。

能做到吗?做这个的最好方式是什么?

答案1

help source

source: source filename [arguments]
    Execute commands from a file in the current shell.

    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.

    Exit Status:
    Returns the status of the last command executed in FILENAME; fails if
    FILENAME cannot be read.

因此,在脚本中,您只需要添加这一行:

source input.in

或者这个(POSIX 版本):

. input.in

要在运行时传递输入文件,您可以使用位置参数:

source "$1"
. "$1"

另请注意,除非具有“整数”属性,d=a*b+c否则它将不起作用:d

declare -i d
d=a*b+c

或者你使用算术展开执行操作:

d=$((a*b+c))

例子:

#!/bin/bash
source "$1"
d=$((a*b+c))
echo "$d"
$ ./script.sh input.in
170

答案2

这是一个非常基本的操作。只是source一个.文件名,结果就像这些行包含在您的主脚本中一样。

语法很简单:

source file_name

或者

. file_name

有一些细微差别,但这是更高级的。请参阅man bash | grep source了解更多详情。

相关内容