スクリプトでは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

おすすめ記事