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?


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

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%/*}")

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.