Попробуйте следующее:
if grep -E '^[^:]*:[^:]*:[^:]{4}' /etc/passwd | grep -Evq '^[^:]*:[^:]*:1000:'
Первый grep
ищет passwd
строки с uid, равным четырем или более
цифр. Второй grep
отфильтровывает строку с uid 1000. Статус выхода
будет равен 0, если остались строки, и 1, если нет.
Разница между --
и -
заключается в том, что при использовании -
параметры -x
и -v
также не устанавливаются.
$ set -vx
$ echo "$-"
himvxBHs # The options -v and -x are set.
$ set - a b c
$ echo "$- <> $@" # The -x and -v options are turned off.
himBHs <> a b c
Это обычный способ, которым оболочки принимают -
, однако в POSIX эта опция «не указана»:
If the first argument is '-', the results are unspecified.
Довольно часто используется разница между set --
и обычным set
.
Это ясно объяснено в руководстве:
-- If no arguments follow this option, then the positional parameters are unset. Otherwise, the positional parameters are set to the args, even if some of them begin with a -.
--указывает на «конец опций», и любой последующий аргумент, даже если он начинается с -, будет использоваться как позиционный аргумент.
$ set -- -a -b -e -f arg1
$ echo "$@"
-a -b -e -f arg1
Вместо:
$ set -a -b -e -f arg1
$ echo "$@"
arg1
Но также изменились некоторые параметры оболочки.
Неиспользование любого из -или --позволит установить параметры набора с переменными, которые расширяются до имен параметров (, даже если они заключены в кавычки):
$ echo "$-"
himBHs
$ a='-f'
$ set "$a"
$ echo "$-"
fhimBHs
Разница между set argument
и set -- argument
характерна для многих других команд.
Иногда у вас есть аргумент, начинающийся с -
, но на самом деле вы не можете его использовать, потому что команда считает, что (, поскольку он начинается с -
), на самом деле является параметром команды.
То, что --
говорит, фактически :«Достаточно! Все, что следует, даже если оно начинается с -
, является фактическим аргументом».
Обычно (в соответствии со страницами руководства )для этой цели одиночный -
эквивалентен --
.
Пример
Вы можете использовать:
set -- -a -b file1 file2
для установки $1
, $2
, $3
и $4
на -a
, -b
, file1
и file2
соответственно. --
не сохраняется -, это просто индикатор; без этого,-a
и -b
будут интерпретироваться как возможные варианты для самой команды set
.