質問

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