내 조건이 내 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