Вопрос

I have a Bash script which passes patterns and switches to grep.

#!/bin/bash

foo() {
    grep $@ *.txt
}

foo $@

And, of course, myscript SomeText works but myscript "Text1 Text2" does not. Is there a way to keep the quotes when passing arguments from script to foo() and then from foo() to grep?

Note, that I cannot simply use eval and wrap the whole $@ before grep since it can also contain switches so I need to keep the original quoting as passed from the command line.

Thanks.

Это было полезно?

Решение

Your grep command looks incomplete, have you script like this with quoted parameters:

#!/bin/bash
set -x # for debug purpose only, comment out later

foo() {
    grep "$@" *.txt
}

foo "$@"

And call it like this:

./myscript "Text1 Text2"

Другие советы

Simply quote the $@:

#!/bin/bash 

foo() { 
    grep "$@" 
} 

foo "$@" 

This is a difference between $@ and $*.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top