id -u $var выдаёт тот же результат, если $var имеет значение или нет

Firefox теперь разблокировал Flash, но только если вы установите последний плагин: http://www.stream-entry.ca/2015/07/updating-flash-plugin-for-firefox-on.html

3
15.08.2018, 00:21
2 ответа

Поскольку расширение переменной не было заключено в кавычки, пустое слово, возникающее в результате расширения $varsome, полностью удаляется.

Давайте создадим функцию, которая выводит количество аргументов, которые она получает, и сравним случай -в кавычках и без кавычек:

$ args() { echo "got $# arguments"; }
$ var=""
$ args $var
got 0 arguments    
$ args "$var"
got 1 arguments

То же самое происходит в вашем случае сid:id -u $varточно так же, как просто id -u, когда varпусто. Так как idне видит имени пользователя, по умолчанию печатает информацию о текущем пользователе.

Если цитировать "$var", то результат будет другим:

$ var=""
$ id -u "$var"
id: ‘’: no such user

С этим исправлением вы можете использовать id, чтобы узнать, существует ли пользователь. (Нам не нужны здесь выходные данные, так что перенаправьте их подальше.)

check_user() { 
    if id -u "$1" >/dev/null 2>&1; then
        echo "user '$1' exists"
    else
        echo "user '$1' does not exist"
    fi
}
check_user root
check_user asdfghjkl

Это напечатает user 'root' existsи user 'asdfghjkl' does not exist.


Это немного противоположно обычным проблемам, возникающим из-за неожиданного разбиения на слова переменных, не заключенных в кавычки. Но основная проблема та же самая и исправлена ​​тем, что половина ответов здесь говорит :всегда цитирует расширения переменных (, если вы не знаете, что хотите поведение без кавычек ).

См.:

9
27.01.2020, 21:09

Команда id -uдаст вам идентификатор текущего пользователя. Команда id -u userдаст вам идентификатор этого пользователя.

Теперь в вашем примере вы используете

var=`whoami`
id -u $var

Команда whoamiвозвращает текущего пользователя. Таким образом, id -u current_userвернет идентификатор текущего пользователя, а id -uтакже вернет идентификатор текущего пользователя.

Редактировать

Обратите внимание, что обратные кавычки устарели, вместо них рекомендуется писать $(whoami), например:

var=$(whoami)
id -u $var
1
27.01.2020, 21:09

Теги

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