문제

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