Herbert Pophal <
pop...@tubit.tu-berlin.de>:
>
>
> On 04/05/2012 02:08 PM, Martin Vaeth wrote:
>> Sascha Hüdepohl <
sas...@ravenworks.de> wrote:
>>> Herbert Pophal <
pop...@tubit.tu-berlin.de> schrieb:
>>>
>>>> Das bringt mich zu der unangesprochenen zweiten Frage. Trotz
>>>> wiederholten Lesens von bash(1) ist es mir noch nicht gelungen, den
>>>> grundsätzlichen Unterschied von [ und [[ herauszufinden. Any hints?
>>>
>>> [[ ist auf jeden Fall ein Shell builtin
>>
>> Der Hauptunterschied ist, dass es als Teil der Syntax der Shell
>> implementiert ist und sich nicht wie ein externes Programm verhält.
>
> Willst du damit sagen, dass sich der builtin [ wie ein externes Programm
> verhält? Oder auch: Was heißt "sich wie ein externes Programm verhalten"?
Ja, denn [ ist als externes Programm spezifiziert, und jede
Spezifikationskonforme Shell muss das auch bei Built-in wie ein
externes Programm behandeln (auch wenn es ein Built-in ist).
Das macht sogar die Bash richtig.
>> Beispielsweise braucht man kein Quoting der Variablen und -
>> mehr noch - Variablenwerte wie "!" oder "-n" werden keinesfalls
>
> Kann es sein, dass die Auswertung der Arguemnte für [ etwas schlampig ist?
Nein. Im Gegensatz zu [[ ist die Auswertung der Argumente fuer [ klar
definiert und aendert sich auch von Unterversion der Shell zu
Unterversion nicht (ist also auch von System zu System nicht
unterschiedlich).
>> als Tests sondern immer als Werte interpretiert - so etwas wie
>> [ a "$b" b ]
>> mit b='!=' ist bei [[ nicht möglich: Das != muss fest im
>> Quelltext stehen.
>
> IMHO ein Beispiel für unleserliches Skripting, Operatoren als Variable.
Haha. Versuch doch mal mit [[ den Variablen-Inhalt mit einem
Ausrufezeichen zu vergleichen (!). Probiere es einfach mal aus.
>> Gerade das Regexp-Beispiel zeigt, dass man [[ meiden sollte,
>> zumindest bei Bash: Bash hat nämlich die Details von Version
>> zu Version geändert. Mal wirkt "=" als Regexp-Operator, mal nicht,
>> dann kommt es darauf an, ob das Argument gequotet ist oder nicht.
>
> WWG. Aber bislang hatte ich [[ ja auch noch nicht verwendet.
Gut so, man sollte dieses Konstruckt auch ausserhalb expliziter
Bash-Programmierung (fuer ganz bestimmte Versionen) meiden.
Juergen
--
Juergen P. Meier - "This World is about to be Destroyed!"
end
If you think technology can solve your problems you don't understand
technology and you don't understand your problems. (Bruce Schneier)