как циклично выполниться через аргументы в сценарии удара

Вы, вероятно, собираетесь хотеть изменить корректный ответ на это:

https://github.com/iaindooley/pickdrop

Пример:

скажите, что я имею:

test/
test/index.php
test/images/
test/images/a.jpg
test/images/thing.png

и я хочу переместить эти вещи в / сайт

таким образом, это похоже:

site/
site/public/
site/public/index.php
site/public/a.jpg
site/public/thing.png

Я могу пойти:

cd images &&
pick a.jpg thing.png
cd .. &&
pick index.php &&
cd .. &&
mkdir site &&
mkdir site/public &&
cd site/public &&
drop

Это буквально сокращается, и вставить.

16
14.06.2013, 02:19
2 ответа

Существует специальный синтаксис для этого:

for i do
  printf '%s\n' "$i"
done

В более общем плане список параметров текущего сценария или функции доступен через специальную переменную $@.

for i in "$@"; do
  printf '%s\n' "$i"
done

Обратите внимание необходимость в двойных кавычках вокруг $@, иначе параметры подвергаются подстановочному расширению и полевому разделению. "$@" является волшебным: несмотря на двойные кавычки, это расширяется в столько же полей, сколько существуют параметры.

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing
28
27.01.2020, 19:48
#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

Необходимо заключить в кавычки $@ потому что для аргументов возможно содержать пробелы (или новые строки, и т.д.), если Вы заключаете им в кавычки или выходите из них с a \. Например:

./myscript one 'two three'

Это - два аргумента, а не три, из-за кавычек. Если Вы не заключаете в кавычки $@, те аргументы будут разбиты в рамках сценария.

5
27.01.2020, 19:48
  • 1
    существует сокращение от этого for f; do ... –  glenn jackman 14.06.2013, 02:36

Теги

Похожие вопросы