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
括弧は必要ありません。&