명령줄에서 조건부로 변수 설정

명령줄에서 조건부로 변수 설정

내 조건이 내 Ubuntu 시스템에서 true인 경우 변수를 설정하고 싶습니다.

이는 내 if 문이 정확하다는 것을 증명합니다.

$ (if [ 1 == 1 ]; then echo "hi there"; fi);
hi there

이는 변수를 설정할 수 있음을 증명합니다.

$ a=1
$ echo $a
1

이는 if 문의 변수 설정이 작동하지 않음을 보여줍니다.

$ (if [ 1 == 1 ]; then a=2; fi);
$ echo $a
1

어떤 아이디어가 있나요? 내가 가진 모든 것구글 조사이렇게 작동해야 함을 보여줍니다 ...

답변1

(...)명령 부분이 문제입니다. 괄호는 별도의 하위 쉘을 만듭니다. 서브쉘은 상위 쉘로부터 환경을 상속하지만 그 안에 설정된 변수는 서브쉘이 종료되면 새로운 값을 유지하지 않습니다. 이는 다음에도 적용됩니다.다른 사람디렉터리 변경, 셸 옵션 설정 등을 포함하여 하위 셸 내의 환경을 변경합니다.

따라서 서브쉘을 제거하십시오.

if [ 1 = 1 ]; then a=2; fi
echo "$a"

답변2

이는 서브쉘에 변수를 설정해도 지속적인 효과가 없음을 증명합니다.

(if [ 1 == 1 ]; then a=2; fi);
echo $a

생산하다

1

그것은 같은

(a=2)
echo $a

생산하다

1

해결책은 괄호를 제거하는 것입니다.

if [ 1 == 1 ]; then a=2; fi;
echo $a

생산하다

2

또는 서브쉘이 필요한 경우

(
  if [ 1 == 1 ]; then a=2; fi;
  echo $a
)

생산하다

2

답변3

다음 방법으로 수행되었으며 훌륭하게 작동합니다.

_example ~]# if [[ 1 == 1 ]]; then echo "praveen"; a=2; echo $a; fi| sed '1i================================\n output'
================================
 output

praveen
2

관련 정보