Linux: set 명령에서 bash 파일로의 파서 변수

Linux: set 명령에서 bash 파일로의 파서 변수

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

코드에 많은 오해가 있습니다

  1. string 없이 변수를 직접 할당하십시오 set. 할당된 문자열에 공백이나 기타 쉘 특정 문자가 포함된 경우 할당된 문자열을 인용하십시오(의심스러운 경우 인용).

    BeginTime='2021-10-11 2:23:00'
    
  2. 어린아이로서 일을 하지 마십시오. 하위 프로세스는 상위 프로세스에 영향을 미칠 수 없습니다. 할당을 실행하면 &상위 프로세스는 변경되지 않고 즉시 종료되는 하위 프로세스에 값을 할당합니다.

  3. 이 값은 아직 환경에 제공되지 않았으므로(사용을 위해 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"

관련 정보