2013-07-23 10 views

Antwort

5

Sie können printf verwenden.

% printf 'str1%s\t' 'str2' 'str3' 'str4' 
str1str2 str1str3 str1str4 
3

Es scheint keinen Weg zu geben. Sie müssen Schleifen verwenden, um diese Namen zu erzeugen, vielleicht in einer Funktion. Oder verwenden Sie Variablen, um allgemeine Teile zu ersetzen, vielleicht mit "set -u", um Tippfehler zu vermeiden.

Ich sehe, dass Sie Dash aus Leistungsgründen bevorzugen, aber Sie scheinen keine Zahlen zur Verfügung zu stellen, um Ihre Entscheidung zu begründen. Ich würde vorschlagen, dass Sie den tatsächlichen Leistungsunterschied messen und neu bewerten. Sie könnten auch für vorzeitige Optimierung fallen. Berücksichtigen Sie, wie viel Zeit für die Implementierung und das Debugging Sie bei der Verwendung von Bash im Vergleich zu möglichen Leistungseinbußen sparen.

+0

Ich denke, es ist in der Tat vorzeitige Optimierung, ich war mir nicht sicher, weil ich nicht so viel Shell-Skripte schreiben. Ich merke, dass sie nichts kompliziertes tun, so dass der Unterschied nur Startup-Zeit bash ... – greg0ire

+0

@ greg0ire, ja, meist die Startzeit, aber es kann immer noch wichtig für Ihren Fall, wenn Sie viele Skriptaufrufe benötigen, oder viele verwenden Sub-Shells in Ihrem Code. Wenn die Leistung für Sie wichtig ist, messen Sie sie für ein typisches Szenario. – spbnick

+0

Zeit gibt mir einen Unterschied fallen: bash = 5ms, sh = 3ms. Ich denke aber, dass es akzeptabel ist. – greg0ire

0

Ich mag die printf Lösung von @mikeserv zur Verfügung gestellt, aber ich dachte, dass ich ein Beispiel nennen würde eine Schleife verwenden.

Das Folgende wäre wahrscheinlich am nützlichsten, wenn Sie einen Befehl für jede erweiterte Zeichenfolge ausführen möchten, anstatt beide Zeichenfolgen als Argumente für denselben Befehl bereitzustellen.

for X in composer sismo; do 
    echo "php/$X"     # replace 'echo' with your command 
done 

Sie könnten jedoch umschreiben es als

ARGS="$(for X in composer sismo; do echo "php/$X"; done)" 
echo $ARGS       # replace 'echo' with your command 

Beachten Sie, dass $ARGS in dem obigen Befehl unquoted ist, und sich bewusst sein, dass dies bedeutet, dass sein Inhalt wordsplitted (dh wenn irgendwelche Ihrer Original-Zeichenketten Leerzeichen enthalten, wird es brechen).