ubuntuusers.de

Prüfen aus welchem Terminalprogramm mein Sript gestartet wurde

Status: Ungelöst | Ubuntu-Version: Xubuntu 16.04 (Xenial Xerus)
Antworten |

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17638

Wohnort: Berlin

turbo112 schrieb:

Bis hier kann ich auch folgen!

Ich auch ☺

Das klappt wunderbar!

Aber was bekommst Du, wenn Du

1
2
b=$d
echo $b

eingibst? Das gleiche wie bei

Das kann ich aber nicht mehr nachvollziehen!
Das oben klappt noch!

1
2
d=So 3. Jul 23:27:12 CEST 2016
echo $d

oder nicht?

Aber das hier nicht mehr!

Nun - bei mir funktioniert auch nicht anders. Ich kann aber nicht die Spezifikation nennen, aus der das hervorgeht. Ich wusste, bevor ich es am 3.7. versuchte, nicht, dass b=$d funktionieren würde, während ich schon wusste, dass "d=So 3. Jul 23:27:12 CEST 2016" nicht funktionieren würde.

Da kommt beim setzen der Variable folgendes:

1
2
$ d=So 3. Jul 23:27:12 CEST 2016
3.: Befehl nicht gefunden.

Was ja auch logisch ist, hier muss es dann heißen:

1
$ d="So 3. Jul 23:27:12 CEST 2016"

oder?

Ja. Oder

1
2
3
4
5
d='So 3. Jul 23:27:12 CEST 2016'
# oder
d=So" "3." "Jul" "23:27:12" "CEST" "2016
# oder
d=So\ 3." Jul 23:27:12 CEST "2016

oder eine von zig anderen Varianten des gleichen Typs.

Womit ich aber immer wieder auf die Nase falle ist folgendes, und das kann ich nicht erklären!

1
2
3
if [ -n $var ] ; then
  ...
fi

Klappt nicht!

1
2
3
if [ -n "$var" ] ; then
  ...
fi

Wenn ich es so mache aber schon, warum?
Und wenn ich in "man test" nachlese steht da:

-n STRING
        the length of STRING is nonzero

Hier ist wieder die Rede von einem String.

Was daran ist Dir daran unklar?

1
2
3
4
5
6
7
8
echo foo${var}baz
foobaz
if [ -n "$var" ] ; then echo laenge null; else echo laenge nicht null; fi
laenge nicht null
if [ -n $var ] ; then echo laenge null; else echo laenge nicht null; fi
laenge null
if [ -n ] ; then echo laenge null; else echo laenge nicht null; fi
laenge null

und:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
t201:~ > var=""
t201:~ > if [ -n $var ] ; then echo laenge null; else echo laenge nicht null; fi
laenge null
t201:~ > x="$var"
t201:~ > echo ${#var}
0
t201:~ > echo ${#x}
0
t201:~ > if [ -n "$var" ] ; then echo laenge null; else echo laenge nicht null; fi
laenge nicht null

Das verstehe ich auch nicht, da steige ich auch aus. Ich merke mir lediglich, dass da Gefahren lauern, und prüfe dann solche Fälle, wenn sie relevant werden, was aber eigentlich so gut wie nie der Fall ist.

Ich hoffe, dass Du nicht böse bist!

Wie sollte ich? Niemand zwingt mich auf Fragen zu antworten. ☺

Denn ich bin wirklich sehr dankbar für solche Hinweise, sie machen das leben sehr viel einfacher!

Links wird es leichter und rechts wird es schwerer. Oder vorne/hinten. Diese -n - Phänomen ist mir auch neu und droht mich zu verwirren - daher wird hier nix einfacher, außer vielleicht dass es zur Faustformel beiträgt, komplexe Programme nicht mit der Shell zu schreiben.

Denn wenn niemand etwas sagt macht man es ja immer weiter falsch! OK, in diesem Fall funktioniert es sowohl als auch, aber dass ist meist nicht so!

Ja, meist funktioniert es weder so, noch so. 😉

Antworten |