Как использовать одну команду bash, например, $ 1, $ 2 или $ 3, в качестве строки текста вместо одного слова? - PullRequest
0 голосов
/ 24 июня 2018

Как я могу использовать команду bashrc, как показано ниже

  # .bashrc file
  # google_speech
  say () {
    google_speech -l en "$1"
  }

в качестве строки текста, поскольку приведенный выше код считывает только первое слово предложения или параграфа, который я вставляю.

как, например, если я захожу в терминал и набираю:

  $ say hello friends how are you

, тогда скрипт только думает, что я набрал

  $ say hello

1 Ответ

0 голосов
/ 24 июня 2018

Попробуйте использовать "$@" (с двойными кавычками вокруг), чтобы получить все аргументы вашей функции:

$ 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).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...