현재 변수를 읽고 아래와 같이 작동하는 스크립트가 있습니다.
#!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
자세한 내용은 참조하십시오 .