Неправильная замена при назначении вывода команды stat для переменной

У меня есть скрипт, который использует поиск и chgrp/chmod для рекурсивной установки определенных разрешений и групп для каталога, указанного в $1

Чтобы извлечь группу из этого целевого каталога, я использую

mygrp = ${stat -c %G $mydir}

Но выполняется под bash, это генерирует ошибку:

${stat -c %G $mydir}: bad substitution

Запуск команды просто как

stat -c %G $mydir

Правильно извлекает группу, кажется, я не могу получить ее в mygrp переменная.

4 ответа

Вы путаете ${...} с $(...),

mygrp=$(stat -c %G "$mydir")

Обратите внимание, что нет пробелов вокруг = разрешены.

Вы должны были делать

$(stat -c %G "$mydir") 

вместо

${stat -c %G $mydir}

Вы должны положить $mydir в двойных кавычках, учитывая, что имя каталога может быть нестандартным, скажем, они содержат символы новой строки. Если бы линия была

   $(stat -c %G $mydir) 

затем:

$ ./your_script_name "dir
37190290"

потерпит неудачу с:

stat: cannot stat `dir': No such file or directory
stat: cannot stat `37190290': No such file or directory

${ }делает расширение переменной.

Для подстановки команд вы должны использовать $()

mygrp=$(stat -c %G $mydir) 

Замените ${ } на $() и уберите пробелы вокруг знака равенства.

$() для подстановки команд.

mygrp=$(stat -c %G $mydir)
Другие вопросы по тегам