main.sh에 다음이 있다고 가정합니다.
$NAME="a string"
if [ -f $HOME/install.sh ]
. $HOME/install.sh $NAME
fi
그리고 install.sh에서:
echo $1
이는 echo 로 되어 있지만 "a string"
아무 것도 에코하지 않습니다. 왜?
답변1
마이클 모로젝대부분의 문제를 다루고 있으며 Bash를 사용하고 있기 때문에 그의 수정 사항이 작동할 것입니다.
매개변수를 사용하여 스크립트를 얻는 기능이 부끄러운 일이라는 사실에 관심이 있으실 수도 있습니다. 또는 sh
소스 스크립트의 매개변수가 무시되고 매개변수가 인용되므로 아무 것도 에코되지 않습니다.dash
main.sh
$1
main.sh.
에서 스크립트를 가져오면 sh
소스 스크립트의 텍스트를 소스 스크립트 파일에 복사하여 붙여넣은 것과 같습니다. 다음 사항을 고려하십시오(Michael이 제안한 수정 사항을 적용했습니다).
$ bash ./test.sh
A String
$ sh ./test.sh
$ sh ./test.sh "HELLO WORLD"
HELLO WORLD
답변2
세 가지 오류가 표시됩니다.
할당 라인이 잘못되었습니다.
$NAME="a string"
변수에 할당할 때 다음을 포함하지 마십시오
$
.NAME="a string"
뭔가 빠졌습니다
then
. 조건부 줄은 다음과 같아야 합니다.if [ -f $HOME/install.sh ]; then
$NAME
공백이 있어도 인용문이 없습니다 . 소스 라인은 다음과 같아야 합니다:. $HOME/install.sh "$NAME"
답변3
스크립트를 받기 전에 매개변수를 설정하기만 하면 됩니다!
메인 디렉토리
#!/bin/bash
NAME=${*:-"a string"}
if [[ -f install.sh ]];
then
set -- $NAME ;
. install.sh ;
fi
exit;
install.sh
#!/bin/bash
echo " i am sourced by [ ${0##*/} ]";
echo " with [ $@ ] as parametr(s) ";
exit;
시험
u@h$ ./main.sh some args
i am sourced by [ main.sh ]
with [ some args ] as parametr(s)
u@h$