Puncte:0

șirul de concatenare bash în buclă are ca rezultat șirul gol

drapel mx

Am urmatorul fisier

Buna ziua
Lume
Ale mele
Nume
este
FalcoGer

Și vreau să concatenez șirurile fiecărei linii.

Am scris următorul script pentru a face exact asta.

#! /usr/bin/bash
myFile=/home/FalcoGer/testfile.txt

rezultat=""
cat $myFile | în timp ce linia citită
do
  rezultat+="$line"
Terminat

echo Rezultat: $rezultat

Cu toate acestea, primesc doar Rezultat: cu un şir gol. Când îl imprimez din buclă, pare să funcționeze bine. Ce este în neregulă cu acest script și cum îl repar?

drapel uz
Jos
Nu puteți concatena șiruri astfel în bash. Încercați `result="$result $line"` .
drapel hr
Vedeți [De ce variabila mea este locală într-o buclă „while read”, dar nu într-o altă buclă aparent similară?](https://unix.stackexchange.com/questions/9954/why-is-my-variable-local-in -un-while-read-buclă-dar-nu-în-altul-aparent)
FalcoGer avatar
drapel mx
@Jos da poți. `+=` este un operator valid în bash. https://stackoverflow.com/questions/4181703/how-to-concatenate-string-variables-in-bash
waltinator avatar
drapel it
Lipiți întotdeauna scriptul în `https://shellcheck.net`, un verificator de sintaxă sau instalați `shellcheck` local. Utilizarea „shellcheck” este parte a procesului de dezvoltare. De asemenea, golul de pe prima linie este greșit. Folosiți „`#!/bin/bash`”.
drapel uz
Jos
Astazi am invatat :-)
drapel hr
BTW presupun că îl folosești doar ca un exercițiu pentru a învăța despre bucle - dacă nu, există opțiuni mai bune, cum ar fi `result=$(paste -sd ''
FalcoGer avatar
drapel mx
@steeldriver, de fapt, folosesc acest lucru pentru a descărca conținutul atelierului de pe steamcmd folosind un fișier text. Am defalcat-o doar pentru exemplul minim. Prefer să am sintaxă lizibilă decât una scurtă. Trebuie să procesez `$line` în orice caz, așa că am nevoie de o buclă.
drapel hr
Dacă trebuie să procesați liniile, acesta este de obicei și mai mult un motiv **nu** pentru a utiliza o buclă shell. Vedeți, de exemplu, [De ce este considerată o practică proastă folosirea unei bucle shell pentru a procesa text?](https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text? -considerat-proasta-practica)
Puncte:4
drapel mx

Utilizarea pipei creează, în esență, un nou script cu un domeniu nou. Puteți evita conducta astfel:

#! /usr/bin/bash
myFile=/home/FalcoGer/testfile.txt

rezultat=""
în timp ce se citește linia -r
do
  rezultat+="$line"
terminat < $myFile

echo Rezultat: $rezultat
drapel cn
Acesta este [BashFAQ 24](http://mywiki.wooledge.org/BashFAQ/024)
bac0n avatar
drapel cn
De obicei doriți să adăugați `-r` pentru a citi.
FalcoGer avatar
drapel mx
@bac0n așa ar părea.

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.