Как удалить известную последнюю часть из выходной строки команды в одну строку? - PullRequest
1 голос
/ 21 февраля 2020

Перефразируя - я хочу использовать Bash подстановку команд и подстановку строк в одной строке.

Мои настоящие команды длиннее, но нелепое использование эха здесь - это просто "замена" для краткости и действует так же - с теми же ошибками;)

Я знаю, что мы можем использовать команду Bash для создания ее выходной строки в качестве параметра для другой команды, подобной этой:

echo "$(echo "aahahah</ddd>")"
aahahah</ddd>

I Также известно, что мы можем удалить последнюю известную часть строки следующим образом:

var="aahahah</ddd>"; echo "${var%</ddd>}"
aahahah

Я пытаюсь написать команду, в которой одна команда выводит строку, где я хочу удалить последнюю часть, которая известна.

echo "${$(echo "aahahah</ddd>")%</ddd>}"
-bash: ${$(echo "aahahah</ddd>")%</ddd>}: bad substitution

Это может быть порядок вещей, или подстановка работает только для переменных или жестко закодированных строк. Но я подозреваю, что только я что-то упустил, и это возможно.

Как мне заставить это работать? Почему это не работает?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Когда используется знак доллара, такой как $word или эквивалентно ${word}, он запрашивает содержимое word. Это называется расширением параметра согласно man bash.

. Вы можете написать var="aahahah</ddd>"; echo "${var%</ddd>}": это расширяет var и выполняет специальную операцию суффикса перед возвратом значения.

Однако вы не может писать echo "${$(echo "aahahah</ddd>")%</ddd>}", потому что после вычисления $(echo "aahahah</ddd>") расширять нечего.

С man bash (мой акцент):

$ {параметр% word}

Удалить соответствующий шаблон суффикса. Слово раскрывается для создания шаблона, как в раскрытии пути. Если шаблон соответствует завершающей части расширенного значения параметра, то результатом расширения будет расширенное значение параметра с самым коротким подходящим шаблоном (случай «%») или самым длинным соответствием шаблон ('' %% '') удален.

1 голос
/ 21 февраля 2020

Комбинируй свои команды вот так

var=$(echo "aahahah</ddd>")
echo ${var/'</ddd>'}
...