Bash에서 변수에 출력 할당


165

cURL의 출력을 변수에 다음과 같이 할당하려고합니다.

#!/bin/sh
$IP=`curl automation.whatismyip.com/n09230945.asp`
echo $IP
sed s/IP/$IP/ nsupdate.txt | nsupdate

그러나 스크립트를 실행하면 다음이 발생합니다.

./update.sh: 3: =[my ip address]: not found

출력을 $IP올바르게 입력하려면 어떻게 해야합니까?


허용되는 대답은 맞지만 그 예와 여기에 또 다른 사소한 차이가 있습니다. echo로 전달 된 $ IP var가 큰 따옴표로 묶이지 않으면 캡처 된 curl 출력의 마지막 행만 출력합니다.
Christopher Hunter

@ ChristopherHunter에게 감사드립니다. 그래도 왜 이렇게 동작합니까?
Amey

@Amey 나는 추론이 무엇인지 정확하게 말할 수는 없지만, 이것이 다중 행 문자열을 인수로 줄 때 에코가 작동하는 방식입니다.
Christopher Hunter

답변:


288

셸에서는 할당하려는 변수 앞에 $를 넣지 않습니다. 변수를 참조 할 때는 $ IP 만 사용하십시오.

#!/bin/bash

IP=$(curl automation.whatismyip.com/n09230945.asp)

echo "$IP"

sed "s/IP/$IP/" nsupdate.txt | nsupdate

2
의 출력 및 진행률 표시 줄을 억제하는 방법이 curl있습니까? 빈 -silent잎을 추가하는 $IP중 ...
Dror

4
@Dror curl는 시끄러운 출력을 stderr로 전송하므로 이와 같은 스크립트의 경우 진행률 표시 줄을 무시해야합니다. 그럼에도 불구하고, --silent또는 -s잘 작동합니다. 문제가있는 경우 질문을하십시오 .
ghoti

사용 curl -s진행률 표시 줄 및 오류 메시지를 해제 할 수 있습니다.
Searene

당신은 항상 리디렉션 할 수 있습니다 stderr:IP=$(curl <url> 2>/dev/null)
BallpointBen

$ () 구문으로 찾기 env 변수를 사용할 수 없습니다. 예를 들어 이메일을 하드 코딩하는 대신 $ 2, $ 3을 변수로 사용하고 싶습니다. 왜 이것이 렌더링되지 않는지에 대한 아이디어가 있습니까?
Evan Burbidge 2018 년

28

인스턴스 내에서 ec2 인스턴스 영역을 가져 오는 더 복잡한 것과 같습니다.

INSTANCE_REGION=$(curl -s 'http://169.254.169.254/latest/dynamic/instance-identity/document' | python -c "import sys, json; print json.load(sys.stdin)['region']")

echo $INSTANCE_REGION

이것은 내가 bash 스크립트에서했던 것과 정확히 같았으며 jq를 apt-get하지 않아도됩니다!
Nungster

Windows에서 어떻게 이것을 할 수 있습니까? 나는 대체 할 경우 $와를 os.system, INSTANCE_REGION 출력의 값이 없습니다.
Heinz

여러 줄을 만드는 방법?
Khalil Gharbaoui
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.