Jeśli możesz sobie pozwolić na wpisanie tylu przecinków, ile smoothchcesz, możesz skorzystać z oddzielonego przecinkami rozszerzenia nawiasów.
TL; DR
Cały wiersz polecenia dla przykładowego przypadku to:
generate | eval 'smooth |'{,,,,} plot
Uwaga:
- dodaj lub usuń przecinki, jeśli chcesz więcej lub mniej powtórzeń
smooth |
- nie ma go
|wcześniej, plotponieważ jest to uwzględnione w ostatnim smooth |ciągu wyprodukowanym przez Brace Expansion
- możesz także podać argumenty
smooth, pod warunkiem, że umieścisz je poprawnie w cytowanej części stałej, która poprzedza otwarty nawias klamrowy; w każdym razie pamiętaj, że będziesz je przekazywał we wszystkich powtórzeniach polecenia
Jak to działa
Rozwinięcie nawiasu rozdzielanego przecinkami umożliwia dynamiczne tworzenie ciągów, z których każdy składa się z określonej części stałej i określonych części zmiennych. Wytwarza tyle łańcuchów, ile jest wskazanych części zmiennych, takich jak a{b,c,d}produkuje ab ac ad.
Mała sztuczka polega na tym, że jeśli raczej utworzysz listę pustych części zmiennych, tj. Z tylko przecinkami w nawiasach klamrowych, rozszerzenie nawiasów spowoduje tylko utworzenie kopii części stałej. Na przykład:
smooth{,,,,}
będzie produkować:
smooth smooth smooth smooth smooth
Zauważ, że 4 przecinki dają 5 smoothciągów. Właśnie tak działa ten Brace Expansion: tworzy ciągi znaków tyle przecinków plus jeden.
Oczywiście w twoim przypadku potrzebujesz również |każdego oddzielającego smooth, więc po prostu dodaj go do części stałej, ale pamiętaj o prawidłowym cytowaniu, aby powłoka nie interpretowała go od razu. To jest:
'smooth|'{,,,,}
będzie produkować:
'smooth|' 'smooth|' 'smooth|' 'smooth|' 'smooth|'
Zadbaj o to, aby zawsze umieszczać nieruchomą część bezpośrednio przylegającą do otwartej klamry, tzn. Nie odstępować między nią ' a {.
(Zauważ również, że aby utworzyć część stałą, możesz również użyć podwójnych cudzysłowów zamiast pojedynczych cudzysłowów, jeśli chcesz rozwinąć zmienne powłoki w stałej części. Wystarczy zadbać o dodatkowe znaki ucieczki, które są wymagane, gdy pojawią się znaki specjalne niektórych powłok wewnątrz ciągu podwójnego cudzysłowu).
W tym momencie musisz eval zastosować ten ciąg, aby powłoka ostatecznie zinterpretowała go jako polecenie potokowe, jakie powinno być.
Tak więc, podsumowując wszystko, cały wiersz polecenia dla twojego przykładowego przypadku wyglądałby następująco:
generate | eval 'smooth |'{,,,,} plot