스크립트 내에서 wgrep 변수를 찾을 수 없습니다.

스크립트 내에서 wgrep 변수를 찾을 수 없습니다.

저는 현재 쉘 스크립팅을 다시 배우고 있습니다. 나는 r/EarthPorn을 확인하고 무작위로 게시물을 선택하고 해당 게시물로 이동하여 이미지를 다운로드하는 스크립트를 만들고 있습니다. 그런 다음 배경으로 설정하십시오.

어떤 이유로 나는 이것을 얻습니다:

URL transformed to HTTPS due to an HSTS policy
--2018-09-09 19:56:10--  https://www.reddit.com/r/EarthPorn
Resolving www.reddit.com (www.reddit.com)... 151.101.125.140
Connecting to www.reddit.com (www.reddit.com)|151.101.125.140|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 485053 (474K) [text/html]
Saving to: ‘STDOUT’

-                         100%[==================================>] 473.68K  1.69MB/s    in 0.3s    

2018-09-09 19:56:12 (1.69 MB/s) - written to stdout [485053/485053]

./wallpaper.sh: 13: ./wallpaper.sh: LINK: not found
http://: Invalid host name.
www.reddit.com/r/EarthPorn/comments/9ef7bi/picture_i_took_hiking_mount_sulphur_banff/

이것이 내가 지금까지 가지고 있는 것입니다:

#!/bin/sh
wget -O - www.reddit.com/r/EarthPorn > file
#1 Get all the post links from the subreddit r/EarthPorn
grep -Po '(?<=href="https://www.reddit.com/r/EarthPorn/comments/)[^"]*' file > links
#2 Fix the links
sed -i -e 's~^~www.reddit.com/r/EarthPorn/comments/~' links
#3 Count the # of posts there are
POST_NUMBER="$(wc -l < links)"
#4 Choose a random number to pick which wallpaper we're going to use
NUMBER=$(shuf -i 1-$POST_NUMBER -n 1)
LINK=$(sed -n ${NUMBER}p < links)
wget -O - "$(LINK)" > picture
echo $LINK
#5 Get the picture link and save it

따라서 초기 wget은 제대로 작동하고 링크에는 올바른 링크가 포함되어 있습니다. 하지만 두 번째 wget에서 $LINK를 찾을 수 없다고 말하는 이유를 모르겠습니다. 내가 에코하면 좋은 링크가 반환되고 나에게는 잘 작동합니다. 동일한 링크를 사용하여 스크립트 외부에서 wget을 실행하면 정상적으로 작동합니다. 조언을 좀 얻을 수 있을까요?

답변1

이 시퀀스를 사용 $(...)하면 대괄호 안의 내용이 실행된 다음 호출자에게 출력이 반환됩니다.

예를 들어,

mydata=$(grep foobar myfile)

$mydata명령의 결과로 설정됩니다 grep.

$LINK귀하의 경우에는 변수를 확장 하고 싶습니다 .

여러분이 생각할 수 있는 것은 ${LINK}이것이 변수 이름이 범위를 해석하도록 강제하는 방법이라는 것입니다.

예를 들어 변수가 발견 echo $a_b되지만 변수가 발견되어 결과에 추가 됩니다.a_becho ${a}_ba_b

관련 정보