Неправильная замена при назначении вывода команды 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)