Puncte:0

Utilizarea variabilelor în buclele for bash

drapel bd

Mă întrebam doar dacă este posibil să folosim variabile în buclele for?? Am incercat:

pentru numărul din { eval echo {0..$1}}
do 
    ecou 5
Terminat

Am vrut să imprime 5 de câte ori am intrat în prompt, totuși, se comportă ciudat dacă intru:

./test.sh 2

Ar trebui să imprime 5 de două ori, dar se tipărește 5 de patru ori. Ma poate ajuta cineva cu asta? Și, de asemenea, de ce se imprimă de 4 ori în loc de 2?

Editați | ×: În majoritatea cazurilor

pentru numărul în $(seq "$2")

Funcționează, dar dacă încerc un calcul cu el, îmi rupe codul:

timp=1
total=5
pentru numărul în $(seq "$2")
do
    echo „$timp + $total” | bc
Terminat

Oferă: seq: argument în virgulă mobilă nevalid: ââ Încercați „seq --help” pentru mai multe informații. Imi poate spune cineva cum sa o repar??

drapel cc
Folosiți backtics (`) în loc de { } exterior și bucla dvs. ar trebui să funcționeze, dar începe de la 1 în loc de 0 pentru două ori așteptate prin buclă.
drapel hr
Dacă utilizați `seq "$2"`, atunci trebuie să furnizați un al doilea parametru de poziție numeric când apelați scriptul de ex. `./test.sh foo 2`
Puncte:2
drapel hr

Se tipărește de 5 de patru ori pentru că { eval ecou {0..2}} rezultă patru jetoane separate prin spații albe {, 0, 1 și 2}

Dacă doriți să utilizați $1 ca sfârșit al unei expresii de gamă în bash, este mai bine să utilizați extern secv comanda:

pentru numărul în $(seq "$1")

sau folosiți un stil C pentru buclă

pentru ((număr=0; număr<"$1"; număr++))
Yunfei Chen avatar
drapel bd
Funcționează, dar dacă folosesc variabile în interiorul buclei for, se întrerupe imediat
Yunfei Chen avatar
drapel bd
timp=1 total=5 pentru numărul în $(seq "$2") do echo „$timp + $total” | bc Terminat
drapel hr
@YunfeiChen eșuează cum, exact? Cum numești scenariul? În special, câți parametri de poziție furnizați (deoarece se pare că ați schimbat `$1` în `$2`)
Yunfei Chen avatar
drapel bd
Îmi dă: (standard_in) 1: eroare de sintaxă (standard_in) 1: caracter ilegal: : (standard_in) 1: eroare de sintaxă (standard_in) 1: eroare de sintaxă (standard_in) 1: eroare de sintaxă (standard_in) 2: eroare de sintaxă (standard_in) 2: caracter ilegal: : (standard_in) 2: eroare de sintaxă (standard_in) 2: eroare de sintaxă (standard_in) 2: eroare de sintaxă
drapel hr
Comentariile @YunfeiChen nu sunt locul potrivit pentru întrebări ulterioare - în special, formatarea nu îmi permite să văd ce tastezi de fapt. Dacă „caracterul ilegal” este `^M`, atunci asta se datorează faptului că scriptul tău are sfârșituri de linie Windows.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.