1

Мне иногда нужно выполнить команду, такую как:

mv "very-long-file-name.x" "very-long-file-name.y"

Я хотел бы добиться этого, не повторяя очень длинное имя файла дважды ...

Я знаю, как это сделать, передав один раз «очень длинное имя файла» сценарию bash, который затем будет использовать $ 1 ... но как я могу сделать это без сценария?

2 ответа2

5

Используйте расширение Brace:

mv very-long-file-name.{x,y}

Не цитируйте часть {x,y} . Не добавляйте пробел до или после любой скобки или запятой.

После расширения это приведет к:

mv very-long-file-name.x very-long-file-name.y
3

bash позволяет вам определять переменные перед командой, например так:

X="very-long-file-name" bash -c 'mv "${X}.x" "${X}.y"'

Но имейте в виду, что переменные, определенные таким образом, определены только для среды, в которой выполняется команда, а не в среде родительской оболочки. Таким образом, вы должны иметь этот bash -c и заключать одинарные кавычки в строку аргумента subshell, иначе переменные будут интерпретироваться в родительской оболочке, где они не определены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .