Экспорт лишних аргументов файла bash в другой текстовый файл - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь написать файл bash, который обычно принимает 3 аргумента. Существует дополнительное условие, которое вызывается, когда дано более 3 аргументов. Это условие должно экспортировать дополнительные аргументы в текстовый файл, который называется избыточным. Вот код, который у меня есть:

if [ $# -gt 3]; then
   for ((i = 4; i <= $#; i++)); do
       echo "$i" >> "excess.txt"    
   done
fi

Вместо того, чтобы экспортировать фактические аргументы, l oop экспортирует числа 4,5,6 ... в текстовый файл.

Я не совсем уверен, почему это происходит, потому что я использовал знак доллара перед 'i' в выражении эха.

Ответы [ 2 ]

1 голос
/ 06 февраля 2020

Вы можете сделать это одной строкой:

printf '%s\n' "${@:4}" > excess.txt

"${@:4}" расширяется до "$4" "$5" "$6" ..., а команда printf имеет свой собственный l oop для вывода строки формата один раз для каждого аргумента .

1 голос
/ 06 февраля 2020

Вы должны использовать косвенное расширение ${!}:

for ((i = 4; i <= $#; i++)); do
    echo "${!i}" >> "excess.txt"
done

также вы можете сделать

shift 3; echo "$@" >> execss.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...