W bash, php/{composer,sismo}
rozwija się do php/composer php/sismo
. Czy jest jakiś sposób, aby to zrobić z /bin/sh
(co moim zdaniem jest myślnikiem), powłoka systemu? Piszę git hooks i would like to stay away from bash as long as I can.myślnik odpowiadający składni nawiasów klamrowych basha?
Odpowiedz
Można użyć printf
.
% printf 'str1%s\t' 'str2' 'str3' 'str4'
str1str2 str1str3 str1str4
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.
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).
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
@ 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
czas daje mi różnicę drop: bash = 5ms, sh = 3ms. Myślę, że jest to jednak do przyjęcia. – greg0ire