Попробуйте использовать "$@"
(с двойными кавычками вокруг), чтобы получить все аргументы вашей функции:
$ declare -f mysearch # Showing the definition of mysearch (provided by your .bashrc)
mysearch ()
{
echo "Searching with keywords : $@"
}
$ mysearch foo bar # execution result
Searching with keywords : foo bar
Аргументы функций или сценариев похожи на массивы, поэтому вы можете использовать:
1) $#
/ ${#array[@]}
для получения количества аргументов / элементов массива.
2) $1
/ ${array[1]}
для получения первого элемента аргумента / массива.
3) $@
/ ${array[@]}
для получения всех аргументов / элементов массива.
EDIT : согласно комментарию chepner :
Использование $ @ внутри большей строки может иногда привести к непредвиденным результатам.Здесь мы хотим создать одно слово, поэтому было бы лучше использовать $ *
И вот хорошая тема с отличными ответами, объясняющими различия.
РЕДАКТИРОВАТЬ 2 : Не забудьте поставить двойные кавычки вокруг $@
или $*
, возможно, ваш google_speach
принимает только один аргумент.Вот демонстрация, чтобы дать вам лучшее понимание:
$ mysearch () { echo "Searching with keywords : $1"; }
$ mysearch2 () { mysearch "$*"; }
$ mysearch2 Hello my dear
Searching with keywords : Hello my dear
$ mysearch3 () { mysearch $*; } # missing double quotes
$ mysearch3 Hello my dear
Searching with keywords : Hello # the other arguments are at least ignored (or sometimes the program will fail when he's controlling the args).