for 루프에서 출력을 변수 파일 이름으로 리디렉션하는 방법은 무엇입니까?

for 루프에서 출력을 변수 파일 이름으로 리디렉션하는 방법은 무엇입니까?

for 루프에서 출력을 변수 파일 이름으로 리디렉션하는 방법은 무엇입니까?

이것은 작동하지 않습니다:

for ((j=501; j <=550; j++)); do 
curl -x http://us-wa.proxymesh.com:31280 "https://catalog.loc.gov/vwebv/search?searchArg=D${j}&searchCode=CALL%2B&searchType=1&limitTo=none&fromYear=&toYear=&limitTo=LOCA%3Dall&limitTo=PLAC%3Dall&limitTo=TYPE%3Dall&limitTo=LANG%3Dall&recCount=1000" >trial_$j_out.html 2> trial_$j_error.txt;
done

계속해서 Trial_.html과 Trial_.txt를 작성했습니다.

답변1

주석에서 지적했듯이 _변수 이름에는 유효한 문자가 있습니다. 쉘은 변수 sum 을 둘러싼 텍스트로 구성된 것으로 trial_$j_out.html해석합니다 .trial_$j_error.txt$j_out$j_error

대신 ${j}실제 URL에서 (불필요하게) 수행하는 것처럼 사용하십시오.

for (( j=501; j<=550; j++ )); do 
    curl -x http://us-wa.proxymesh.com:31280 \
        "https://catalog.loc.gov/vwebv/search?searchArg=D$j&searchCode=CALL%2B&searchType=1&limitTo=none&fromYear=&toYear=&limitTo=LOCA%3Dall&limitTo=PLAC%3Dall&limitTo=TYPE%3Dall&limitTo=LANG%3Dall&recCount=1000" \
        >"trial_${j}_out.html" 2>"trial_${j}_error.txt"
done

이렇게 하면 변수 이름이 다음 이름과 올바르게 구분됩니다 _. 해당 문자는 변수 이름의 일부로 유효하지 않으므로 URL에는 $j중괄호가 필요하지 않습니다 .&

관련 정보