Puncte:0

Nu se pot scăpa spațiile din numele variabilei

drapel cn

Încerc să mă ocup de spațiile din numele directorului. Ca exemplu:

drive=/mnt/g; unitatea de export
mydir="$drive/director cu spații în nume"
echo „$mydir”

Rezultatul:

/mnt/g/directorul cu spații în nume

Ceea ce, desigur, explodează la utilizare, deoarece bash vede acest lucru ca argumente separate. Rezultatul dorit ar fi ceva de genul:

„/mnt/g/directorul cu spații în nume”

ca un singur argument pentru procesarea ulterioară (mutări, copii sau orice altceva). M-am gândit că un ghilimele dublu face șmecheria. Evident nu. Bash continuă să mănânce ghilimele duble. Îmi poate indica cineva procedura adecvată pentru manipularea variabilelor cu spații încorporate?

Folosesc subsistemul Windows pentru Linux în Windows 10, dar Ubuntu 20.04 LTS are același comportament, așa că presupun că ceea ce funcționează pentru unul, va funcționa pentru ambele. (Ceva cu ILS poate, IDK.)

drapel uz
Jos
Variabila `$drive` este OK așa cum este. Este comanda ulterioară care necesită lucru, de ex. `mv $drive/myfile /backup/` ar trebui să devină `mv "$drive/myfile" /backup/`.
drapel hr
bash extinde `"$mydir"` ca un argument *unic* - dacă "explodează la utilizare", atunci este din cauza a ceva după care faci (pe care nu l-ai arătat)
Puncte:1
drapel cn

Codul tău este în regulă! Aveți spații în variabilă, de aceea vor fi și spații din ecou. Deci, dacă doriți să utilizați un parametru care conține spații, trebuie să puneți între ghilimele așa cum faceți.

exemplu:

comanda „${variable1}” „${variable2}”
Puncte:0
drapel ru

Dacă rezultatul dorit este

„/mnt/g/directorul cu spații în nume”

codul de care ai nevoie este

drive=/mnt/g; unitatea de export
mydir="\"$drive/director cu spații în nume\""
echo „$mydir”
bac0n avatar
drapel cn
dacă doriți să păstrați citatul, utilizați în mod normal bash *operator* `${mydir@Q}`
kris44dad avatar
drapel cn
Iată partea pe care nu o înțeleg. O comandă „cd” ulterioară (de exemplu) către acel director spune, prea multe argumente. Bash analizează spațiile. Acest lucru se întâmplă în toate exemplele enumerate aici. mydir="\"$drive/directory cu spații în nume\"" îmi oferă variabila cu ghilimele duble, dar totuși analizează spațiile atunci când este folosită. ${mydir@Q} îmi oferă ghilimele simple, iar „${mydir}” îmi oferă același rezultat ca și postarea inițială. Se pare că nu pot transmite un singur argument shell-ului. Toate transmit mai multe argumente atunci când sunt utilizate.
drapel ru
Nu am înțeles ce vrei să faci. Doriți să `cd` la `$mydir` din scriptul bash sau doriți să creați o variabilă de mediu pentru a lansa o comandă `cd envVariable` pe un prompt de comandă?

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.