Использование информации / результата из команды в терминале OS X

#macos #terminal #console

#macos #терминал #консоль

Вопрос:

Я пишу сценарий оболочки на OS X и не знаю, как повторно использовать возвращаемые значения и сохранять их как переменные. Например, если я введу команду «git submodule foreach —recursive» внутри терминала, я получу напечатанные 3 строки, например:

 Entering 'path/of/submodule/1'
Entering 'path/of/submodule/2'
Entering 'path/of/submodule/3'
  

Теперь я хочу использовать эти строки путей для дальнейших манипуляций внутри моего скрипта. Итак, мне нужно сохранить их во что-то вроде, может быть, массива …. ??? Я впервые пытаюсь использовать сценарии оболочки, поэтому любые предложения приветствуются.

Ответ №1:

Типичным подходом было бы передать стандартный вывод в цикл while:

 git submodule foreach --recursive 
  | while read line ; do
       echo Processing $line
       ...
    done
  

Чтобы строго ответить на ваш вопрос, вы также можете присвоить результат команды переменной с

 a=$(git submodule foreach --recursive)
  

Если вы хотите a быть массивом, используйте

 a=($(git submodule foreach --recursive))
  

НО bash имеет тенденцию разделяться на пробелы, поэтому вам нужно быть осторожным при использовании этого синтаксиса для строк, содержащих пробелы, и вы ожидаете разделения при переводе строк.

Если ваша цель состоит в том, чтобы просто обрабатывать выходные данные по одной строке за раз, while это самый простой вариант.