Я написал следующую команду, чтобы сопоставить $ a с $ b, но когда значение включает «-», я получаю сообщение об ошибке. Как я могу избежать этого?
# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
# echo "$a" | grep -Fxc "$b"
grep: conflicting matchers specified
grep -Fxc -- "$b" <<< "$a"
избежать ненужного канала[[ ... ]]
илиcase
будет лучшим выбором, так как вы избегаете оба идиосинкразииecho
и дочерних процессов.grep
как буквальный символ, а не как начало опции, т.е.echo test-test | grep "\-test"
будет соответствовать, а не жаловаться на неизвестный-t
флаг.Ответы:
Поместите
--
перед вашим шаблоном:--
задает параметры конца команды для многих встроенных команд / оболочек, после чего оставшиеся аргументы обрабатываются как позиционные аргументы.источник
Помимо отличного ответа @ sebasth , вы могли бы сказать, что PATTERN с
grep's -e
опцией использовать PATTERN в качестве шаблона (здесь используется<<<
zsh
оператор here-string вместоecho
; смотрите такжеprintf '%s\n' "$a"
для переносимости).Или все, кроме других вариантов.
Поскольку ваша цель - сравнение равенства строк между байтами, используйте
[
команду.Или, если
$a
содержит$b
, используя[[...]]
конструкцию ksh:Или, более переносимо, во всех оболочках типа Борна:
источник
==
не является стандартным для[
команды; это башизм . Используйте=
вместо этого.