How to keep strings quoted in bash parameters
-
03-07-2021 - |
Вопрос
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 $*
.
Не связан с StackOverflow