Význam "${prom}" v bashi ;neukládá proměnné shell bash

bash nemá

K čemu v bashi je konstrukce "${prom}" ? Má nějaké využití, kde by   ${prom} nebo $prom nestačilo ?

Pak druhý dotaz
proč
printf   "a1\na2" | read jj ; echo $jj
echo   "a1\na2" | read jj ; echo $jj

vypíše obojí  prázdný řádek, dokonce proměnné jsou nedefinovány ,když vymažu výpis shellu, dám set a přes Ctrl F prohledám výskyt proměnnné-
« Poslední změna: 26. 04. 2018, 11:14:23 od Petr Krčmář »


v

Re:význam "${prom}" v bashi ;neukládá proměnné shell bash
« Odpověď #1 kdy: 26. 04. 2018, 10:19:26 »
zřetězení třeba
Kód: [Vybrat]
echo $CROSS_COMPILE
echo $CROSS_COMPILEgcc
echo ${CROSS_COMPILE}gcc

Re:význam "${prom}" v bashi ;neukládá proměnné shell bash
« Odpověď #2 kdy: 26. 04. 2018, 10:28:15 »
K čemu v bashi je konstrukce "${prom}" ? Má nějaké využití, kde by   ${prom} nebo $prom nestačilo ?

Pak druhý dotaz
proč
printf   "a1\na2" | read jj ; echo $jj
echo   "a1\na2" | read jj ; echo $jj

vypíše obojí  prázdný řádek, dokonce proměnné jsou nedefinovány ,když vymažu výpis shellu, dám set a přes Ctrl F prohledám výskyt proměnnné-


ad1 shell parameter expansion
ad2 a preco je tam pajpa? ked chces aby to nieco robilo daj si miesto pajpy ;
« Poslední změna: 26. 04. 2018, 10:30:03 od snuff1987 »

v

Re:význam "${prom}" v bashi ;neukládá proměnné shell bash
« Odpověď #3 kdy: 26. 04. 2018, 10:50:24 »
ještě jeden případ
Kód: [Vybrat]
x="${CROSS_COMPILE}gcc x.c"

Skid

Re:význam "${prom}" v bashi ;neukládá proměnné shell bash
« Odpověď #4 kdy: 26. 04. 2018, 10:56:54 »
Pak druhý dotaz
proč
printf   "a1\na2" | read jj ; echo $jj
echo   "a1\na2" | read jj ; echo $jj
Pokud je to fakt takto, neni to nejaky nepovedeny priklad ze skoly?
-----BEGIN GEEK CODE BLOCK-----
Version: 3.12
G! d- a s: C++ BAHSL++ P+ L++
E--- W+ N-- K- w-- O- M- V- PE Y
PGP- t--- !tv b+ DI- D+ e++ h--
------END GEEK CODE BLOCK-----


AoK

  • ***
  • 203
    • Zobrazit profil
Re:význam "${prom}" v bashi ;neukládá proměnné shell bash
« Odpověď #5 kdy: 26. 04. 2018, 11:14:12 »

Pak druhý dotaz
proč
printf   "a1\na2" | read jj ; echo $jj
echo   "a1\na2" | read jj ; echo $jj


Na první už bylo odpovězeno, ale třeba existují ještě tvary z modifikátory ${prom//x/y} nebo ${prom:-0}. doporučuji si pročíst manuál https://www.tldp.org/LDP/Bash-Beginners-Guide/html/Bash-Beginners-Guide.html

Máš to více nezávislých procesů:
1) echo   "a1\na2" | read jj
    1b) echo   "a1\na2"
    2b) read jj
2) echo $jj

Read je je subprocess prvního příkazu a nemá žádný vztah s příkazem druhým. Před těmi příkazy si zavolej set -u a dozvíš se proč ti to vrací prázdný řádek :).

Správně by třeba mělo být echo -e "a1\na2" | while read jj; do echo $jj; done, tj. pak strom procesů:
1) echo -e "a1\na2" | while read jj
    1a) echo -e "a1\na2"
    1b) while read jj
           1ba) while read jj