for k in {0..49}; do a=$(($((2*$k))+1)); echo $a; done Hei, jeg trenger et forenklet uttrykk for tredje linje, kanskje en som gjør det ikke bruk kommandosubstitusjon.
Kommentarer
Svar
Ved hjelp av aritmetisk utvidelse:
for (( k = 0; k < 50; ++k )); do a=$(( 2*k + 1 )) echo "$a" done  Ved hjelp av det forældede expr verktøyet: 
for (( k = 0; k < 50; ++k )); do a=$( expr 2 "*" "$k" + 1 ) echo "$a" done  Bruk av bc -l ( -l faktisk ikke nødvendig i dette tilfellet ettersom ingen matematiske funksjoner brukes): 
for (( k = 0; k < 50; ++k )); do a=$( bc -l <<<"2*$k + 1" ) echo "$a" done  Bruk av bc -l som samprosess (det fungerer som en slags beregningstjeneste i bakgrunnen¹): 
coproc bc -l for (( k = 0; k < 50; ++k )); do printf "2*%d + 1\n" "$k" >&${COPROC[1]} read -u "${COPROC[0]}" a echo "$a" done kill "$COPROC_PID"  Den siste ser (uten tvil) renere ut i ksh93: 
bc -l |& bc_pid="$!" for (( k = 0; k < 50; ++k )); do print -p "2*$k + 1" read -p a print "$a" done kill "$bc_pid"  ¹ Dette løste et problem for meg en gang der jeg trengte å behandle en stor mengde innspill i en løkke. Behandlingen krevde noen flytende punktberegninger, men gyting bc noen ganger i sløyfen viste seg å være ekstremt treg. Ja, jeg kunne ha løst det på mange andre måter, men jeg kjedet meg … 
Svar
Du kan forenkle:
a=$(($((2*$k))+1)); til:
a=$((2*k+1)) Svar
 Du kan bruke kommandoen let til å tvinge en beregning. 
let a="2*k+1"  Merk at vi ikke trenger $k i denne strukturen. En enkel k vil gjøre jobben. 
Kommentarer
-  Det mislykkes hvis det ' en fil som heter a=2whateverk+1i gjeldende Verre, hvis det ' en fil som hetera=2+b[$(reboot)]k+1, som kaller kommandoenreboot. Det beste er å bruke((...))her (((a = 2 * k + 1))), eller POSIX-syntaksen:a=$((2 * k + 1))
-  Vi kan sitere det; let a="2*k+1"for å løse det.
Svar
Den aritmetiske utvidelsen du sannsynligvis trenger er denne:
a=$(( 1+2*k )) Du trenger faktisk ikke bruke en variabel:
for k in {0..49}; do echo "$(( 1 + 2*k ))" done  Eller tellevariabelen kan flyttes til en for ((…)) loop: 
for (( k=0;k<50;k++ )); do a=$(( 1+2*k )) printf "%s\n" "$a" done for ((…)) loop
Og i så fall kan den aritmetiske utvidelsen også være flyttet til for-sløyfen:
for (( k=0 ; a=1+2*k , k<50 ; k++)); do printf "%s\n" "$a" done Eller for å få alle verdier i en matrise:
for (( k=0 ; a[k]=1+2*k , k<49 ; k++ )); do :; done printf "%s\n" "${a[@]}" Ingen formel
Men sannsynligvis er den korteste måten å unngå aritmetisk utvidelse på å øke en variabel to ganger:
for (( k=0,a=1 ; k<50 ; k++,a++,a++ )); do printf "%s\n" "$a" done Eller, enda enklere, bruk bare seq:
seq 1 2 100 
bashog ikkeC, så fjern alle;– med mindre du skriver det i en entall.declare -i a; for k in {0..49}; do a=2*$k+1; echo $a; done$(( ... ))er aritmetisk utvidelse ikke kommandosubstitusjon.