2016-05-06 8 views
0

Ich versuche, ein "Lambda" -Stil WHERE Skript zu erstellen.Wie kann ich Bash IF [[]] aus String bewerten lassen?

Ich möchte LambdaWHERE piped Eingang nehmen und es übergeben, wenn Bedingung nach gegeben als Argumente erfüllt ist. Wie bei xargs verwende ich {}, um darzustellen, was in der Pipe ankommt.

Ich nenne Kommando:

ls -d EqAAL * | lambdaWHERE.sh -f {}/INFO_ACTIVETICK

ich die Ordnernamen durchlaufen wollen, wenn sie eine Datei namens INFO_ACTIVETICK enthalten

Hier ist das Skript:

#!/bin/sh 
#set -x 

ARGS=$* 

while read i 
do 
     CMD=`echo $ARGS | sed 's/{}/'$i'/g'` 

     if [[ $CMD ]] 
     then 
       echo $i 
     fi 
done 

Aber wenn ich es ein mysteriöses laufen "-n" erscheint ...

$ ls -d EqAAL* | /q/lambdaWHERE.sh -f {}/INFO_ACTIVETICK 
+ ARGS='-f {}/INFO_ACTIVETICK' 
+ read i 
++ echo -f '{}/INFO_ACTIVETICK' 
++ sed 's/{}/EqAAL-1m/g' 
+ CMD='-f EqAAL-1m/INFO_ACTIVETICK' 
+ [[ -n -f EqAAL-1m/INFO_ACTIVETICK ]] 
+ echo EqAAL-1m 
EqAAL-1m 
+ read i 

Wie kann ich das Bit in der [[]] richtig bekommen?

Antwort

1

Sie waren ziemlich nah dran. Sie müssen nur auf den Standard POSIX [ $CMD ] wechseln und es wird funktionieren.

Der Hauptunterschied zwischen der Verwendung [[ $CMD ]] und [ $CMD ] ist, dass die erste weniger Überraschungen hat und Sie keine Variablen angeben müssen. Das bedeutet auch, dass eine Variable wie ein Token ist und nicht einen ganzen Ausdruck darin haben kann, wie Sie es versuchen. [ $CMD ] funktioniert jedoch genauso wie die ursprüngliche Shell, wo [ nur ein Befehl war und daher explizite Zitate benötigen, um etwas mit Leerzeichen als ein Argument zu interpretieren.

Es gibt eine relevant question about the differences zwischen [[ ...]] und [ ..]

+0

aber erkennen, dass dies zu tun wird es unmöglich ** ** machen conditionals zu verwenden, die Leerzeichen eingebettet erfordern, Kleckse usw., wie sie von der Shell erweitert werden. –

+0

Großartig. Das funktioniert genau so, wie ich es gerne hätte - danke – ManInMoon

+0

@EtanReisner Das kannst du mit Zitat und Flucht umgehen. – Sylwester