나는 bash 스크립트에서 출력을 변수에 에코하기 위해 다음과 같은 작업을 수행하는 데 익숙합니다.
myvar=`echo $OSTYPE`
echo "my os is of type: ${myvar}"
그러나 현재 프로젝트에서는 sh를 사용하고 있는데 Ubuntu 인스턴스의 bash와 심볼릭 링크되지 않은 것 같습니다. 내가 이렇게 말하는 이유는 ${myvar}
상단에 /bin/sh shebang이 있을 때 위 코드가 아무 것도 표시하지 않기 때문입니다.
그래서 나는 echo $OSTYPE
이것이 sh와 함께 갈 방법이 아니라고 생각합니까? 그렇지 않다면 어떻게 비슷한 일을 할 수 있습니까? (반향을 시도했지만 $(myvar)
역시 작동하지 않았습니다.)
답변1
내에서는 다음이 잘 작동하는 것 같습니다 sh
.
$ myvar="test"
$ echo "My var is $myvar."
My var is test.
echo
변수의 값을 가져와서 다른 변수에서 다시 캡처할 필요가 없습니다 .변수 할당에 대한 자세한 내용은 다음과 같습니다..
문제는, 환경에 정의 OSTYPE
되어 있지 않습니다 . sh
스크립트를 실행할 때 이를 전달해야 합니다. 그러니 달리는 것보다...
$ /bin/sh yourscript.sh
or
$ ./yourscript.sh
다음을 실행해야 합니다:
$ OSTYPE=$OSTYPE /bin/sh yourscript.sh
or
$ OSTYPE=$OSTYPE ./yourscript.sh
물론 이는 위 명령을 입력한 상위 쉘에 변수가 있다는 가정입니다 OSTYPE
. bash
이것이 사실 이지만 모든 껍질이 이와 같은 것은 아닙니다. 그러나 다음을 $OSTYPE
사용할 수도 있습니다 uname
.
$ OS=$(uname -o)
$ echo "My OS is $OS."
My OS is GNU/Linux.
$ echo "My OS is $(uname -o)."
My OS is GNU/Linux.
내 컴퓨터에서는 OS
변수가 GNU/Linux
대신 으로 설정됩니다 linux-gnu
(이것이 my is 입니다 OSTYPE
).
참고로, 귀하의 코드에 해당하는 것은 다음과 같습니다.
$ myvar="$(echo $OSTYPE)"
$ echo "My var is $myvar."
My var is linux-gnu