2017-08-17 1 views
0

Hier ist der Einzeiler Ich habe Interesse an (vor allem in den Variablen out):Angabe Operand innerhalb als bash Variable dirname echos

find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done 

ich, bevor es diese Einzeiler Echo muß kochend in ein anderes Programm, aber es funktioniert nicht:

echo "find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done" 

mit der folgenden Meldung:

dirname: missing operand 
Try `dirname --help' for more information. 
find ~ | head -3 | while read f; do out=; echo ; done 

So verwende ich s ingle und doppelte Anführungszeichen:

echo "find ~ | head -3 | while read f; do out=$(dirname "'${f}'"); echo "'${out}'"; done" 

, die ohne Fehler zurückgibt:

find ~ | head -3 | while read f; do out=.; echo ${out}; done 

Aber $(dirname ${f}) nicht Echo als ist.

Irgendeine Idee, wie man es macht?

Antwort

1

Substitution Verwendung Apostrophe zu verhindern oder entkommen $:

echo 'find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done' 

echo "find ~ | head -3 | while read f; do out=\$(dirname \${f}); echo \${out}; done" 
0

Verwenden Sie eine Variable den Befehl zum Speichern und Echo der Variable:

cmd='find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done' 
echo $cmd 
+0

Die Variable ist nicht notwendig, aber wenn du gehst, es zu benutzen, Sie * müssen * die Erweiterung zitieren. – chepner

0

Ich weiß nicht, warum Sie drucken müssen nur mit echo. Aber wenn Sie auf diese Weise wollen nur dann unten verweisen:

echo `find ~ | head -3 | while read f; do out=$(dirname ${f}); echo ${out}; done` 
Verwandte Themen