Вам необходимо процитировать аргумент, когда ваш сценарий вызывается, чтобы показать, что это один аргумент, а не два независимых аргумента. Внутри вашего сценария вы должны использовать «$ @»
.
grep -r --color=always "$@" . | nolong
И вызов (например) (например) ...
findstr "hello world"
(но обратите внимание, что рисунок GREP использует только один аргумент, поэтому «$ 1»
вместо «$ @ @»
] будет достаточно.)
Если вы хотите найти регулярное выражение, которое представляет собой конкатенацию аргументов с пробелами между ними, это будет:
#! /bin/sh -
IFS=' ' # used for "$*"
grep -r --color=always -e "$*" . | nolong
«$ *»
объединяет позиционные параметры с первым символом (фактически ] байт , кроме yash
) из $ IFS
.
Обратите внимание (поскольку вам кажется, что значение пробела сбивает вас с толку), если вы запустите:
myscript hello world
myscript hello world
myscript 'hello' "world"
Пробелы (или кавычки) не передаются в myscript
, они просто часть оболочки синтаксис командной строки. В этих трех командных строках оболочки myscript
получает те же 3 аргумента: «myscript», «hello» и «world».
Если вы хотите найти любое из регулярных выражений, переданных в качестве аргументов:
#! /bin/sh -
for i do
set -- "$@" -e "$i"
shift
done
[ "$#" -gt 0 ] && grep -r --color=always "$@" . | nolong