Допустим, вы пишете сценарий оболочки. Он принимает произвольное количество аргументов командной строки и передает их утилите командной строки. При вызове этой утилиты каждый аргумент должен начинаться с флага. Как правильно избежать этого в вашем скрипте, чтобы утилита видела те же строки, что и скрипт оболочки?
Конкретный пример: передача регулярных выражений в grep
. Вы запускаете свой скрипт оболочки:
./findit.sh needle "old socks" "spare change"
И вы ожидаете, что grep
будет вызываться с этими аргументами в качестве выражений соответствия:
grep haystack.txt -e needle -e "old socks" -e "spare change"
Это префикс -e
который усложняет ситуацию; если в этом нет необходимости, вы можете просто использовать "$@"
. Что нужно сделать вашему скрипту, чтобы убедиться, что grep
правильно экранирует аргументы? Есть ли портативный способ сделать это?