Обратные параметры командной строки в скрипте bash - PullRequest
0 голосов
/ 12 октября 2019

Я должен написать простой bash-скрипт для своего класса программирования. Идея состоит в том, чтобы использовать цикл for с $* (имена файлов в качестве параметров командной строки). Задача состоит в том, чтобы перевернуть и распечатать параметры командной строки, все еще используя цикл for inFile in $*; do.

Я не знаю, как это сделать.

#!/bin/bash

for inFile in $*;do
  echo $inFile
done

Я знаю, что это не такЭто просто выводит параметры командной строки по порядку.

1 Ответ

0 голосов
/ 12 октября 2019

Если вы хотите изменить позиционные параметры, $* не подходит. Рассмотрим следующий сценарий:

for arg in $*; do
    echo "$arg"
done

Когда вы запустите bash script.sh foo 'bar baz', вы получите:

foo
bar
baz

Вы ищете "$@" вместо:

for arg in "$@"; do
    echo "$arg"
done

Для тех же параметров это приведет к:

foo
bar baz

Подробнее об этих переменных можно прочитать в разделе Специальные параметры вman bash.


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

for ((i = $#; i > 0; i--)); do
    echo "${!i}"
done

Синтаксис ${!varname} используется дляразвернуть до значения переменной, указанной $i. Например, когда сценарий имеет 10 параметров, мы хотим вывести ${10}, $9, $8 и т. Д. До $1.


Работа с индексами $@ может быть сложно, как в предыдущем примере. Это может быть легче понять, если вы храните содержимое $@ в обычном массиве:

arr=("$@")
for ((i = ${#arr[@]} - 1; i >= 0; i--)); do
    echo "${arr[i]}"
done
...