Powłoki nie przeprowadzają żadnej reorganizacji otrzymanego kodu, jest on po prostu interpretowany jeden wiersz po drugim (nic innego nie ma większego sensu w interpretatorze poleceń). Większość czasu spędzanego przez powłokę przeznacza się na analizę leksykalną / parsowanie / uruchamianie programów o nazwie.
W przypadku prostych operacji (takich jak ciąg znaków w przykładach na końcu pytania) zdziwiłbym się, gdyby czas załadowania programów nie spowodował żadnych drobnych różnic prędkości.
Morał tej historii jest taki, że jeśli naprawdę potrzebujesz większej prędkości, lepiej jest skorzystać z (częściowo) skompilowanego języka, takiego jak Perl lub Python, który jest szybszy od samego początku, w którym możesz napisać wiele operacji wymienionych bezpośrednio i nie trzeba wywoływać zewnętrznych programów, i ma opcję wywoływania zewnętrznych programów lub wywoływania zoptymalizowanych modułów C (lub cokolwiek innego), aby wykonać większą część pracy. To jest powód, dla którego w Fedorze „cukier do administrowania systemem” (GUI) jest napisany w Pythonie: można dodać fajny GUI bez większego wysiłku, wystarczająco szybki dla takich aplikacji, mieć bezpośredni dostęp do wywołań systemowych. Jeśli to za mało, wybierz C ++ lub C.
Ale nie idź tam, chyba że możesz udowodnić, że wzrost wydajności jest wart utraty elastyczności i czasu rozwoju. Skrypty powłoki nie są takie złe, aby je odczytać, ale wzdrygam się, gdy pamiętam niektóre skrypty użyte do instalacji Ultrix, które kiedyś próbowałem rozszyfrować. Zrezygnowałem, zastosowano zbyt wiele „optymalizacji skryptu powłoki”.