![如何在 for 循环中将输出重定向到变量文件名?](https://linux22.com/image/120069/%E5%A6%82%E4%BD%95%E5%9C%A8%20for%20%E5%BE%AA%E7%8E%AF%E4%B8%AD%E5%B0%86%E8%BE%93%E5%87%BA%E9%87%8D%E5%AE%9A%E5%90%91%E5%88%B0%E5%8F%98%E9%87%8F%E6%96%87%E4%BB%B6%E5%90%8D%EF%BC%9F.png)
如何在 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
不需要大括号,因为该字符&
作为变量名称的一部分无效。