set
명령 에서 bash
스크립트 로 변수를 전달하려고 합니다 .
$ set BeginTime=2021-10-11 2:23:00 & ./getBeginTime.sh
문서 getBeginTime.sh
:
local getBeginTime=$(set | grep BeginTime)
echo "BeginTime : = $getBeginTime"
echo $getBeginTime
빈 문자열이 반환되는 이유를 설명해주세요.
답변1
코드에 많은 오해가 있습니다
string 없이 변수를 직접 할당하십시오
set
. 할당된 문자열에 공백이나 기타 쉘 특정 문자가 포함된 경우 할당된 문자열을 인용하십시오(의심스러운 경우 인용).BeginTime='2021-10-11 2:23:00'
어린아이로서 일을 하지 마십시오. 하위 프로세스는 상위 프로세스에 영향을 미칠 수 없습니다. 할당을 실행하면
&
상위 프로세스는 변경되지 않고 즉시 종료되는 하위 프로세스에 값을 할당합니다.이 값은 아직 환경에 제공되지 않았으므로(사용을 위해
export
) 이를 스크립트에 전달하려면 명령줄에 포함해야 합니다../getBeginTime.sh "$BeginTime"
그런 다음 해당 값을 스크립트의 첫 번째 매개변수로 선택할 수 있습니다.
#!/bin/sh getBeginTime="$1" echo "BeginTime : = $getBeginTime"
이 명령문을 작성하는 더 좋은 방법
echo
은 를 사용하는 것입니다printf
. 이echo
명령은 셸에서 비표준이며, 구현에 따라 특정 문자 시퀀스를 다르게 처리합니다. 반면에printf
더 표준화되어 있습니다. 다음은 변수%s
에 해당하는 매개변수에 대한 자리 표시자 입니다."$getBeginTime"
printf "BeginTime : = %s\n" "$getBeginTime"
실제로 값을 환경 변수로 전달하려는 경우 다음 섹션에서 두 가지 방법을 설명하지만 이는 값을 전달하는 덜 일반적인 방법입니다.
# Define an environment variable just for this invocation
BeginTime='2021-10-11 2:23:00' ./getBeginTime.sh
또는
# Define an environment variable for the remainder of this session
export BeginTime='2021-10-11 2:23:00'
# You can now use it as many times as you want
./getBeginTime.sh
./getBeginTime.sh
코드에서는 "$BeginTime"
변수로 사용하면 됩니다.
답변2
이를 수행하는 두 가지 방법은 다음과 같습니다.
1. 환경 변수를 사용하십시오.
Bash 터미널에서 변수를 설정합니다.
export BeginTime="2021-10-11 2:23:00"
그런 다음 매우 간단한 스크립트에서 test.sh
해당 변수를 호출합니다 .
[ws] user test_directory >cat test.sh
echo $BeginTime
2. 매개변수 전달:
test.sh
이제 스크립트 는 다음과 같습니다.
[ws] user test_directory >cat test.sh
echo $1
매개변수를 사용하여 호출합니다.
[ws] user test_directory > bash test.sh "2021-10-11 2:23:00"