"sh: : unknown operand" in Yocto
Folgende funktioniert bei Ubuntu aber nicht Yocto (Winzig).
root@system:~/# x='abc'
root@system:~/# y=''
root@system:~/# [[ $(echo $x) != '' ]] && echo true
true
root@system:~/# [[ $(echo $y) != '' ]] && echo true
sh: : unknown operand
In Ubuntu die Letzte Zeile gibt nichts zurück (wie erwartet). Irgendwelche Ideen, warum es wirft einen Fehler in Yocto?
- Ich Wette, dass
sh
ist nicht das gleiche auf diese beiden Plattformen und, die auf Yocto es ist nicht als vollständig umgesetzt, ich war wirklich überrascht, dasssh
umgesetzt[[
an alle, Yocto oder sonst - Ubuntu dash-sh, während ein Bild gebaut mit OpenEmbedded oft hat busybox sh.
- Irgendeine Idee was genau das problem sein kann, obwohl, wenn man bedenkt, es funktioniert in der Yocto für
$x
? - Ich vermute, das problem ist, wie es mit "leeren" args, so lange, wie Sie einen Wert auf jeder Seite des
!=
wird es funktionieren. Sie könnten nur versuchen, unter Angabe der Kommando-Substitutionen wie[[ "$(echo $y)" != '' ]]...
und sehen, ob das hilft - Das funktioniert, danke Eric. Hinzufügen möchten, wie die Antwort?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem scheint zu sein, dass
$(echo $y)
baut auf einen leeren string, und dann[[
ist nicht handling es richtig. Die Lösung wäre, zu zitieren, der Kommando-substitution ist wieobwohl es wahrscheinlich noch besser zu nutzen printf als echo, so dass Sie könnte es tun, als
nur für den Fall
$y
könnten am Ende mit Besondere Zeichen, die Reise bisecho
oder ähnlicheOffenbar busybox-ash hat eine ziemlich vereinfachende Umsetzung von
[[
. Es ist das gleiche wie[
außer, dass es erwartet eine]]
statt]
Letzte argument. Dies trifft nicht den Punkt, warum[[
kann nützlich sein, an alle:[[
soll ein Stichwort sein mit speziellen parsing und es sieht schöner aus und vermeidet Tücken (beim hinzufügen von einigen seiner eigenen). Ich denke, Sie hat es so ein paar bash-Skripte laufen unverändert auf busybox ash.Um Verwirrung zu vermeiden, empfehle ich nicht mit
[[
in busybox überhaupt. Verwenden[
zitieren und alle Kommando-Substitutionen und parameter-Erweiterungen.