Вы, вероятно, собираетесь хотеть изменить корректный ответ на это:
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
Это буквально сокращается, и вставить.
Существует специальный синтаксис для этого:
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
#! /usr/bin/env bash
for f in "$@"; do
echo "$f"
done
Необходимо заключить в кавычки $@
потому что для аргументов возможно содержать пробелы (или новые строки, и т.д.), если Вы заключаете им в кавычки или выходите из них с a \
. Например:
./myscript one 'two three'
Это - два аргумента, а не три, из-за кавычек. Если Вы не заключаете в кавычки $@
, те аргументы будут разбиты в рамках сценария.