#bash #clang-format
Вопрос:
Я пытаюсь перейти arg
к clang-format
:
arg="-style="{BreakBeforeBraces: Attach}""
clang-format -i $arg 'myfile.h'
но получил следующую ошибку:
No such file or directory
Invalid value for -style
Однако, если я просто выполню команду, как показано ниже:
clang-format -i -style="{BreakBeforeBraces: Attach}" 'myfile.h'
Это работает совершенно нормально.
Комментарии:
1. Используйте для этого массив или функцию оболочки
2. @anubhava спасибо. не могли бы вы подробнее рассказать о том, почему и как использовать массив / функции оболочки для устранения проблемы, пожалуйста?
Ответ №1:
Вы можете просто создать функцию, подобную этой:
cfmt() {
clang-format -i "$@"
}
Затем используйте его как:
cfmt -style="{BreakBeforeBraces: Attach}" myfile.h
Другой безопасный способ-хранить аргументы в массиве оболочки:
arg=('-i' '-style="{BreakBeforeBraces: Attach}"')
# use it as
clang-format "${arg[@]}" 'myfile.h'
Комментарии:
1. Мое намерение состоит в том, чтобы передать стиль в формат clang, потому что это может быть другой стиль в другой ситуации. У меня нет проблем с тем, чтобы обернуть их в функцию.
2. Конечно, проверьте мой обновленный ответ
Ответ №2:
Оболочка удаляет двойные кавычки при непосредственном выполнении команды, поэтому нет необходимости указывать их в значении переменной.
Однако вам нужно удвоить значение переменной, чтобы сохранить ее содержимое одним словом:
arg='-style={BreakBeforeBraces: Attach}'
clang-format -i "$arg" myfile.h
Если число аргументов не является фиксированным (включая возможное 0), используйте массив:
args=('-style={BreakBeforeBraces: Attach}')
clang-format -i "${args[@]}" myfile.h
Комментарии:
1. Похоже, что если arg является пустой строкой (в случае, если мне не нужны дополнительные стили, например, arg=»», то использование этого способа выдаст мне ошибку «Нет такого файла или каталога».
2. Если количество аргументов не фиксировано, используйте массив.
3. Блестяще! Спасибо!