Rozszerzenie parametrów wielu zmiennych

2

Rozszerzanie parametrów pojedynczej zmiennej działa zgodnie z oczekiwaniami. Ale jak rozszerzyć parametry zawierające kilka zmiennych? Przykład:

#!/bin/sh

foo=/lorem/ipsum; bar=dolor/sit

tmp="$foo/$bar"
printf '%s\n' "${tmp%/*}"

Jak uruchomić rozszerzenie tego parametru bez potrzeby stosowania zmiennej tymczasowej?

Marco
źródło
wprowadzasz „/” za pomocą zmiennej $ tmp; zakładam, że należy to uwzględnić, zakładam?
Jeff Schaller
@JeffSchaller Tak, rzeczywiście.
Marco
Jaki jest problem? Jakie wyniki otrzymujesz i czego oczekujesz? Powinieneś być w stanie używać tyle zmiennych, ile chcesz w cudzysłowach.
ogrodnik

Odpowiedzi:

2

Rozszerzenie pozwala na tylko jedną zmienną, wymagając temp var. Jeśli jednak jest to dokładny przypadek użycia, nazwa_katalogu może dla Ciebie zadziałać, ponieważ robi prawie dokładnie to samo, co% / *:

$ foo=/lorem/ipsum; bar=dolor/sit
$ dirname $foo/$bar
/lorem/ipsum/dolor
Brandon DuPree
źródło
0

Oto jedno ... obejście ... które nie ustawia zmiennej tymczasowej w bieżącej powłoce:

foo=/lorem/ipsum; bar=dolor/sit
(tmp="$foo/$bar"; printf '%s\n' "${tmp%/*}")
Jeff Schaller
źródło
Jest zawarty w skrypcie powłoki, więc nie jest problemem, że zmienna tam jest. Moim zamiarem było mieć czystszą bazę kodu i zmniejszyć liczbę niepotrzebnych zmiennych.
Marco