Возможно ли, и если да, как преобразовать следующее выражение в однострочный?
DEV=$(lsblk -no KNAME,MODEL | grep 'ModelNAME')
DEV=${DEV%%'ModelNAME'}
Простой DEV=${(lsblk -no KNAME,MODEL | grep 'ModelNAME')%%'ModelNAME'}
не работает
Возможно ли, и если да, как преобразовать следующее выражение в однострочный?
DEV=$(lsblk -no KNAME,MODEL | grep 'ModelNAME')
DEV=${DEV%%'ModelNAME'}
Простой DEV=${(lsblk -no KNAME,MODEL | grep 'ModelNAME')%%'ModelNAME'}
не работает
ЗШ позволяет комбинировать расширения параметров. У Баша нет.
Для bash или POSIX sh (оба из которых поддерживают это конкретное расширение параметра), вам нужно сделать это как две отдельные команды.
Тем не менее, есть есть другие варианты. Например:
# tell awk to print first field and exit on a match
dev=$(lsblk -no KNAME,MODEL | awk '/ModelNAME/ { print $1; exit }')
... или, еще проще (но требующей Баш или другой современной производной КШ):
# read first field of first line returned by grep; _ is a placeholder for other fields
read -r dev _ < <(lsblk -no KNAME,MODEL | grep -e ModelNAME)
'read' - интересное решение, спасибо! –
Правильно, это не так. Нет, вы не можете произвольно комбинировать разложения параметров в bash. –
Вы можете написать однострочную команду, которая делает то же самое, если вам действительно нужно. Вы также можете заменить новую строку символом ';', если вы просто хотите их на одной визуальной линии. Какова реальная цель здесь? –
Что такое вывод 'lsblk -no KNAME, MODEL | grep 'ModelNAME''? –