#!/bin/bash
FILE="$(basename "$1")"
FILE="${FILE/%.jpeg/.jpg}"
Есть ли способ склеить эти две линии в одну линию?
bash
shell
shell-script
string
gsklee
источник
источник
sed
, я определенно буду нуждаться.Вы не можете вкладывать расширения в bash (ни в ksh, ни в пепел, ни в другие оболочки кроме zsh). Это только косметическое ограничение, поскольку, как вы видите, вы можете назначить промежуточное выражение для временной переменной. Это немного раздражает для однострочников, но в сценариях это возможно лучше для удобочитаемости.
Вы можете избежать использования внешней утилиты
basename
и использовать вместо этого конструкцию манипуляции со строками:Здесь бывает так, что вы можете переписать свой скрипт, чтобы поместить подстановку команд снаружи . Это не общее явление, и вы не получаете ничего, кроме определенного чувства одной линии.
Zsh, к лучшему или к худшему, позволяет вам вкладывать расширения:
Или вы можете использовать встроенную конструкцию zsh вместо
basename
:источник
Я бы пошел на:
Второй параметр basename - это суффикс, который необходимо удалить из имени файла (см.
man basename
)источник
Вы можете использовать одну
sed
команду, как показано ниже:источник
Включение
sed
, это должно сделать свое дело:(Это не совсем отвечает на ваш вопрос, потому что я не могу; не уверен, если это возможно.)
источник
Конструкции Bash
${}
работают с именами переменных , поэтому нет способа встроить команду напрямую. Подход @ sr_ является альтернативой, если вы не против дополнительной вилки.источник
Линия
можно сократить и сделать более портативным с
источник