2013-07-23 20 views

Odpowiedz

5

Można użyć printf.

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

Wydaje się, że nie ma sposobu. Będziesz musiał użyć pętli do wygenerowania tych nazw, być może w funkcji. Lub użyj zmiennych do zastąpienia części wspólnych, być może z "set -u", aby zapobiec literom.

Widzę, że wolisz myślnik z powodów związanych z wydajnością, jednak wydaje się, że nie podajesz żadnych liczb w celu uzasadnienia swojej decyzji. Proponuję zmierzyć rzeczywistą różnicę w wydajności i powtórzyć. Możliwe, że ulegasz przedwczesnej optymalizacji. Zastanów się, ile czasu na wdrożenie i debugowanie zaoszczędzisz, używając Bash vs. możliwy spadek wydajności.

+0

Myślę, że to rzeczywiście przedwczesna optymalizacja, nie byłem pewien, ponieważ nie piszę tak dużo skryptów powłoki. Zdaję sobie sprawę, że nie robią nic skomplikowanego, więc różnica będzie tylko czas uruchamiania bash ... – greg0ire

+0

@ greg0ire, tak, głównie czas uruchamiania, ale nadal może być ważne dla twojego przypadku, jeśli potrzebujesz wielu wywołań skryptu lub użyć wielu pod-powłoki w kodzie. Jeśli wydajność jest dla Ciebie ważna, zmierz ją dla typowego scenariusza. – spbnick

+0

czas daje mi różnicę drop: bash = 5ms, sh = 3ms. Myślę, że jest to jednak do przyjęcia. – greg0ire

0

bardzo podoba mi się rozwiązanie printf dostarczonych przez @mikeserv, ale pomyślałem, że stanowią przykład za pomocą pętli.

Poniższa pozycja byłaby prawdopodobnie najbardziej przydatna, gdybyś chciał wykonać jedno polecenie dla każdego rozwiniętego łańcucha, zamiast podawać oba łańcuchy jako argumenty dla tego samego polecenia.

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

Mogłeś jednak przepisać go jako

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

Zauważ, że $ARGS jest cytowane w powyższym poleceniu, a należy pamiętać, że oznacza to, że jej treść jest wordsplitted (tzn czy jakichkolwiek oryginalnych strun zawierają spacje, to się zepsuje).

Powiązane problemy