Что делает run_command () {echo "+" "$ @";"$ @";} значит в скрипте bash? - PullRequest
0 голосов
/ 23 сентября 2018

Итак, я - новый учебный скрипт bash и придумал следующий фрагмент кода.

run_command() {
  echo "+" "$@"
  "$@"
}

Я не понимаю, что означает "$ @" и почему это дважды?

Большое спасибо за потраченное время и хорошего дня.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2018

Аагам Джайн получил ответ.Я добавлю некоторые объяснения, которые не вписываются в раздел комментариев.Я прошу прощения за многословие.

Рассмотрим этот пример.

Отображение параметров, заданных сценарию

test.sh:

echo "$1"
echo "$2"

Давайте запустим этот скрипт и передадим ему 2 параметра.

$> bash test.sh ls -l

Результат:

ls
-l

Первый параметр ls, представленный $1, отображается впервая строка.Второй параметр -l, представленный $2, отображается во второй строке.

Руководство по Bash - давайте посмотрим, что там написано

($ @) Расширяется до позиционных параметров, начиная с одного

См. Это: https://www.gnu.org/software/bash/manual/bash.html#Special-Parameters

Как это влияет на наш пример?Давайте немного изменим test.sh.

Расширение параметров, начиная с одного

test.sh:

echo "$@"

Давайте запустим его.

$> bash test.sh ls -l

Результат:

ls -l

$@ перечислил оба параметра в одной строке один за другим.Если бы у вас было 5 параметров, они были бы напечатаны один за другим.

Давайте немного изменим test.sh.

Добавление + в эхо

test.sh:

echo "+" "$@"

Запустим его.

$> bash test.sh ls -l

Результат:

+ ls -l

Это значит, + появился до того, как оба параметра были напечатаны.

Измените test.sh немного больше.

Выполните все предоставленные параметры

test.sh:

echo "+" "@"
"$@"

Давайте запустим это.

bash test.sh ls -l

Результат:

+ ls -l
total 4
-rw-r--r-- 1 eapo users  0 Sep 23 19:38 file1
-rw-r--r-- 1 eapo users 19 Sep 23 19:38 test.sh

Отлично.Как отметили комментаторы и Аагам, скрипт распечатал, что он собирался выполнить (используя echo "+" "$@"), а затем выполнил команду."$ @" В основном просто делает ls -lh.Терминал просто выполняет его как есть.

Давайте теперь добавим функцию в скрипт.

Добавление функции в скрипт

test.sh:

run_command() {
    echo "+" "$@"
    "$@"
}

run_command ls -l

Обратите внимание, что мы выполняем функцию в самом скрипте, а не в командной строке

Запустим ее.

bash test.sh

Результат:

+ ls -l
total 4
-rw-r--r-- 1 eapo users  0 Sep 23 19:38 file1
-rw-r--r-- 1 eapo users 58 Sep 23 19:41 test.sh

Надеюсь, что примеры помогут вам понять, как работает скрипт.

0 голосов
/ 23 сентября 2018

Печатается команда и ее вывод.

например

run_command() {
  echo "+" "$@"
  "$@"
}

run_command ls

#output
#+ ls
#files_list_in_current_directory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...