Можно ли заставить общий объект запускаться от имени пользователя root или использовать setuid или setgid, если его вызывающий объект не является одним из них?

Вы получите «слишком много аргументов», если переменные содержат пробелы, что приведет к тому, что расширения без кавычек будут разбиты на несколько слов. Так что, действительно, вы должны заключать в кавычки все переменные в [.. ], чтобы предотвратить это.

Второй if, который вы написали (if [ "$inputstring" = "$INPUT" ]), верен и будет запускать основную ветвь if, если две переменные действительно содержат одни и те же данные. Но в зависимости от того, откуда они берутся, у вас могут быть лишние пробелы внутри них или что-то еще, что трудно увидеть. Используйте, например. printf "<%q>\n" "$INPUT", чтобы увидеть содержимое переменной в однозначном формате. (Выходной формат зависит от значения переменной, но обычно оно печатается в кавычках и/или показывает специальные символы с обратной косой чертой -.)

Например, здесь переменные не содержат одни и те же данные, последние имеют пробел в конце:

$ foo=123
$ bar="123 "
$ echo $foo $bar
123 123
$ if [ "$foo" = "$bar" ]; then echo same; else echo not same; fi
not same
$ printf "<%q>\n" "$foo" "$bar"
<123>
<123\ >
0
03.08.2021, 19:32
0 ответов

Теги

Похожие вопросы