Sida 1 av 1
”Översätta” en tom sträng [LÖST]
Postat: 20 feb 2011, 11:31
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:
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.
Re: ”Översätta” en tom sträng
Postat: 20 feb 2011, 12:53
av Osprey
Om du kan stå ut med att använda två rader, så kan du ju alltid göra det som:
...men det är möjligt att det går att göra ännu mer kompakt...

Re: ”Översätta” en tom sträng
Postat: 20 feb 2011, 13:26
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:
...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:
Fast jag vill ha det på ungefär denna form:
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…
Re: ”Översätta” en tom sträng
Postat: 20 feb 2011, 13:42
av Osprey
Du får exakt det resultatet med det jag skrev också, även om det blir två rader...
Re: ”Översätta” en tom sträng
Postat: 20 feb 2011, 16:06
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…
Re: ”Översätta” en tom sträng
Postat: 20 feb 2011, 16:23
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!

Re: ”Översätta” en tom sträng [LÖST]
Postat: 20 feb 2011, 21:39
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.
Re: ”Översätta” en tom sträng [LÖST]
Postat: 21 feb 2011, 00:02
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:
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.
Re: ”Översätta” en tom sträng [LÖST]
Postat: 21 feb 2011, 18:12
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:
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.