現在、変数を読み込み、以下のように動作するスクリプトがあります。
#!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
詳細は参照してください。