한 줄에 두 개의 변수를 출력하는 쉘 스크립트를 작성하고 싶습니다.
내 스크립트는 다음과 같습니다
SRC = "192.168.1.1"
PORT = "22"
출력이 다음과 같이 보이길 원합니다.
192.168.1.1,22
어떻게 해야 하나요? 감사해요.
답변1
여러 변수를 에코하려면 echo
동일한 명령에서 해당 변수를 참조하면 됩니다. 또한 올바른 쉘 할당 구문은 에 있습니다 =
.
#!/bin/sh
SRC="192.168.1.1"
PORT="22"
echo "$SRC,$PORT"
스크립트를 실행한 결과는 다음과 같습니다.
$ ./test.sh
192.168.1.1,22
답변2
일반적으로 printf
다음과 같은 변수에 대한 데이터를 출력합니다.
#!/bin/sh
src=192.168.1.1
port=22
printf '%s,%s\n' "$src" "$port"
#!
상단에 누락된 - 줄을 추가했습니다 ./bin/sh
기존 코드에는bash
또는 같은 특정 다른 셸이 필요하지 않기 때문에 셸(POSIX 셸)을 선택했습니다zsh
(또한Shebang 없이 스크립트를 실행하는 쉘 인터프리터는 무엇입니까?).- 할당은 문자 주위에 공백 없이 수행됩니다
=
(참조:쉘 스크립트에서 변수 할당의 공백). - 기존 환경 변수나 쉘 특정 변수와의 예상치 못한 충돌을 피하기 위해 소문자 변수 이름을 사용합니다(참조:쉘 스크립트의 변수에 대한 명명 규칙이 있습니까?).
printf
귀하의 데이터가 외부 소스에서 도착할지 모르기 때문에 예방 조치로 사용하기로 결정했으며echo
때로는 잘못되는 것으로 알려져 있습니다일부특정 문자열(참조왜 printf가 echo보다 나은가요?).
인용문에 관해 다음과 같은 흥미로운 점을 발견할 수도 있습니다.
또는,
#!/bin/sh
src=192.168.1.1
port=22
string="$src,$port"
printf '%s\n' "$string"
여기서 유일한 차이점은 처음 두 변수의 쉼표로 구분된 값을 사용하여 새 변수를 만든 다음 출력한다는 것입니다. 이는 나중에 스크립트에서 문자열을 사용하는 방법에 따라 원하는 것일 수 있습니다.