”Översätta” en tom sträng [LÖST]

Här diskuterar vi skal, kommandon och klassiska linuxverktyg.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

”Översätta” en tom sträng [LÖST]

Inlägg av Johnny Rosenberg »

Står still igen, jag är hopplös, tydligen. Någon som kan komma på ett sätt att ”konvertera” en tom sträng till ett annat värde? Här är ett exempel där jag använder ett påhittat kommando:

Kod: Markera allt

echo "$x" | EttKommando "" "Tom"
Alltså, om x är tom ska den istället innehålla texten ”Tom”, annars ska x behålla sitt värde. Det uppenbara är väl en if-sats, men jag funderade på om man kunde använda sed eller tr, men jag har inte lyckats med detta…

Användningen jag tänker mig är att resultatet av exempelvis sed, awk, grep eller liknande aldrig får bli en tom sträng, utan om så är fallet ska strängens värde bli något jag har fördefinierat.
Senast redigerad av 1 Johnny Rosenberg, redigerad totalt 20 gånger.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: ”Översätta” en tom sträng

Inlägg av Osprey »

Om du kan stå ut med att använda två rader, så kan du ju alltid göra det som:

Kod: Markera allt

x=$(EttKommando)
x=${x:="Tom"}
...men det är möjligt att det går att göra ännu mer kompakt... :)
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: ”Översätta” en tom sträng

Inlägg av Johnny Rosenberg »

Osprey skrev:Om du kan stå ut med att använda två rader, så kan du ju alltid göra det som:

Kod: Markera allt

x=$(EttKommando)
x=${x:="Tom"}
...men det är möjligt att det går att göra ännu mer kompakt... :)
Inser nu att jag förklarade hur opedagogiskt som helst. Vad jag var ute efter var ett kommando som ersatte mitt trams där i form av ”EttKommando "" "Tom"”. Alltså, vad skulle jag skriva där istället för detta påhittade kommando?

Eller så här: Vi har variabeln x. Om den innehåller något så ska den inte påverkas, men om den är tom ska den innehålla texten ”Tom”.

x="Tjohej" ⇨ x="Tjohej"
x="" ⇨ x="Tom"

Eller för att vara ännu tydligare och med C-syntax:

Kod: Markera allt

if (x=="") {
	x="Tom";
}
Fast jag vill ha det på ungefär denna form:

Kod: Markera allt

x=$(echo ${x} | blaha "" "Tom")
där ”blaha "" "Tom"” ska ersättas med något som gör själva jobbet…

Kanske blir det enklaste ändå att låta blaha-biten vara en enrads-if. Kändes lite klumpigt bara…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Osprey
Inlägg: 6310
Blev medlem: 06 apr 2008, 00:09
OS: Ubuntu
Ort: Göteborg/Mölndal/Falkenberg
Kontakt:

Re: ”Översätta” en tom sträng

Inlägg av Osprey »

Du får exakt det resultatet med det jag skrev också, även om det blir två rader...
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: ”Översätta” en tom sträng

Inlägg av Johnny Rosenberg »

Osprey skrev:Du får exakt det resultatet med det jag skrev också, även om det blir två rader...
Hur då? Det finns ju inget kommando som heter ”EttKommando”, så allt jag får är ju ett felmeddelande och vad som då händer på andra raden blir ju då lite oväsentligt…

x har ju ett utgångsvärde som vi inte känner till, exempelvis ”abc” eller ”123” eller rent av ””. Det enda jag vill göra är att tilldela x värdet ”Tom” (i just detta förenklade exemplet) om x=””, det vill säga om x inte innehåller några tecken alls.

Förklara gärna hur du tänkt så att en hjärndöd hockeypuck kan förstå; då kanske det finns en liten chans att jag också förstår…
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: ”Översätta” en tom sträng

Inlägg av Johnny Rosenberg »

Okej, nu fattar jag.
Den andra raden i ditt svar var det jag var ute efter. Ditt svar är alltså på en rad, inte två. Värdet på x skapas på annat sätt i mitt skript, så första raden ingår inte i problemet, så att säga.

Det var alltså jag som uttryckte min fråga på ett oklart sätt, precis som jag misstänkte.

Men nu verkar det löst, i alla fall.

Man tackar!
:)
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: ”Översätta” en tom sträng [LÖST]

Inlägg av Johnny Rosenberg »

Okej, ger upp. Problemet är visserligen löst, men jag har nu sökt frenetiskt efter någonstans där jag kan hitta en förklaring till varför ”x=${x:="Tom"}” fungerar, men inte hittat något om ”:=” som har med bash att göra, trots ett flertal olika sökförsök (kul ord, förresten…).

Någon som har lust att bjuda på en länk? Vill ju helst inte använda kod jag inte förstår till 100%, även om det också hänt vid ett fåtal tillfällen.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Konservburk
Inlägg: 5919
Blev medlem: 07 apr 2007, 22:28

Re: ”Översätta” en tom sträng [LÖST]

Inlägg av Konservburk »

Johnny Rosenberg skrev:Okej, ger upp. Problemet är visserligen löst, men jag har nu sökt frenetiskt efter någonstans där jag kan hitta en förklaring till varför ”x=${x:="Tom"}” fungerar, men inte hittat något om ”:=” som har med bash att göra, trots ett flertal olika sökförsök (kul ord, förresten…).

Någon som har lust att bjuda på en länk? Vill ju helst inte använda kod jag inte förstår till 100%, även om det också hänt vid ett fåtal tillfällen.
Det finns ett stycke om detta i man bash:

Kod: Markera allt

       ${parameter:=word}
              Assign Default Values.  If  parameter  is  unset  or  null,  the
              expansion of word is assigned to parameter.  The value of param-
              eter is then substituted.   Positional  parameters  and  special
              parameters may not be assigned to in this way.
Det finns även en alternativ beskrivning här: http://tldp.org/LDP/abs/html/parameter- ... l#DEFPARAM

Det hela används smidigast på detta sätt:

Kod: Markera allt

: ${variabel:=text}
Om $variabel är tom så får den istället värdet text, men i annat fall så behåller den sitt tidigare värde.
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: ”Översätta” en tom sträng [LÖST]

Inlägg av Johnny Rosenberg »

Konservburk skrev:
Johnny Rosenberg skrev:Okej, ger upp. Problemet är visserligen löst, men jag har nu sökt frenetiskt efter någonstans där jag kan hitta en förklaring till varför ”x=${x:="Tom"}” fungerar, men inte hittat något om ”:=” som har med bash att göra, trots ett flertal olika sökförsök (kul ord, förresten…).

Någon som har lust att bjuda på en länk? Vill ju helst inte använda kod jag inte förstår till 100%, även om det också hänt vid ett fåtal tillfällen.
Det finns ett stycke om detta i man bash:

Kod: Markera allt

       ${parameter:=word}
              Assign Default Values.  If  parameter  is  unset  or  null,  the
              expansion of word is assigned to parameter.  The value of param-
              eter is then substituted.   Positional  parameters  and  special
              parameters may not be assigned to in this way.
Det finns även en alternativ beskrivning här: http://tldp.org/LDP/abs/html/parameter- ... l#DEFPARAM

Det hela används smidigast på detta sätt:

Kod: Markera allt

: ${variabel:=text}
Om $variabel är tom så får den istället värdet text, men i annat fall så behåller den sitt tidigare värde.
Dåligt av mig att jag inte hittade det i manualsidorna. Borde läsa på hur man söker efter text där.

Jag experimenterade i alla fall lite med det där skrivsättet igår och funderade på om man kunde sätta värdet till en annan variabel eller ett uttryck, men det sket sig… Men när jag provade idag så funkade det… i alla fall till en annan variabel… Får experimentera vidare, tror jag.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Terminalforum"