如何在 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
正如注释中指出的,_
是变量名称中的有效字符。 shell 将把trial_$j_out.html
and解释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
不需要大括号,因为该字符&
作为变量名称的一部分无效。