И чтобы ответить на мой собственный вопрос:
благодаря сопровождающим проекта я обнаружил, что исходная команда "неверна"
Правильный вариант должен использовать source
в качестве имени группы томов.
lxc storage create pool1 lvm source=<vg_name> lvm.thinpool_name=<thinpool_name>
Я предполагаю, что вы видели $(CC)
в Makefile, где он служит расширением переменной CC
, которая обычно содержит имя компилятора C. Синтаксис $(...)
для расширения переменных в файлах Makefile используется всякий раз, когда расширяется переменная с многосимвольным именем -, поскольку в противном случае $CC
расширялось бы до значения переменной C
, за которым следует литерал C
($CC
. в действительности будет таким же, как $(C)C
в Makefile ).
Однако в оболочке из-за другого синтаксиса $(CC)
— это подстановка команды, которая будет заменена выводом выполнения команды CC
. Если в вашей системе нет такой команды, вы увидите ошибку «команда не найдена».
Также возможно, что вы перепутали $(CC)
с ${CC}
, что в оболочке эквивалентно $CC
в большинстве случаев. Фигурные скобки нужны только в том случае, если за расширением переменной следует сразу какая-то другая строка, которая в противном случае интерпретировалась бы как часть имени переменной. Пример разницы можно увидеть в"$CC_hello"
(расширяет переменную с именемCC_hello
)и"${CC}_hello"
(расширяет переменную CC
и добавляет строку _hello
к ее значению ). Во всех остальных случаях ${CC}
эквивалентно $CC
. Обратите внимание, что использование фигурных скобок — это , а не цитирование расширения, т. е. ${CC}
— это , а не , то же, что "$CC"
.
Если у вас есть переменная оболочки или среды, содержащая имя компилятора, который вы используете для компиляции кода C, и вы хотите использовать эту переменную в командной строке, используйте "$CC"
или просто $CC
, если значение переменной не содержит пробелов или подстановочных символов оболочки.
$CC -o hello.elf hello.c
Они не эквивалентны. В строке, содержащей $(foo)
, $(foo)
заменяется выводом команды foo
. Например:
$ echo "hello $(echo world)"
hello world
В строке, содержащей $foo
, $foo
заменяется значением переменной с именем foo
. Например:
$ foo=world
$ echo "hello $foo"
hello world
Этот ответ не учитывает синтаксис make-файла.
"$(CC)"
— это вывод команды CC
.
"$CC"
— значение переменной CC
.
Это должно прояснить разницу:
$ CC=ls
$ echo $(CC)
CC: command not found
$ echo $CC
ls
и
$ echo $($CC)
bin cdrom dev home initrd.img.old lost+found mnt proc run...