Я думаю также :pwd
или getcwd()
то, что Вы ищете.
:pwd
=> печать рабочий каталог
getcwd()
=> получают текущий рабочий каталог
Разделите 15.2.1 “Нижних индекса Массива”, говорит, что массивы могут быть индексом с [exp]
(где exp
числовое выражение), и это, элементы запускаются в индексе 1 (0, если KSH_ARRAYS
установлен).
Разделите 14.3 “Расширений Параметра”, говорит что синтаксис ${#array_name}
расширится до числа элементов массива.
Разделите 6.3 “Сложных Команд”, дает синтаксис для числового for
цикл (как в C):
for (( initExpr ; testExpr ; stepExpr )) do … done
.
Помещение их всех вместе:
for (( i = 1; i <= $#LOCAL_PATH; i++ )) do
( # subshell to contain the effect of the chdir
cd $LOCAL_PATH[i]
hg pull $REMOTE_PATH[i]
)
done
Или, если Вы используете KSH_ARRAYS
, затем это:
for (( i = 0; i < ${#LOCAL_PATH[@]}; i++ )) do
( # subshell to contain the effect of the chdir
cd ${LOCAL_PATH[i]}
hg pull ${REMOTE_PATH[i]}
)
done
Используя KSH_ARRAYS
заставляет массивы запуститься с индекса 0, требует использования фигурных скобок для выражений с массивами и интерпретирует $array
как $array[0]
(требование изменения в выражении длины массива). Изменения синтаксиса, требуемые KSH_ARRAY
будет также работать без KSH_ARRAY
, но все еще необходимо скорректировать логику для другого индексного диапазона (1 через N по сравнению с 0 через N-1).
Если у вас есть контроль над двумя массивами, вы также можете объединить их в связанный массив. (подумайте о «хэше» в Ruby/Perl, «карте» в C++, «HashMap» в Java или «dict» на Питоне):
typeset -A remotes
remotes=(
local1 remote1
local2 remote2
)
for local remote in "${(@kv)remotes}" # (kv) means key and value
# and (@) within quotes is to
# preserve empty ones (in your
# case ${(kv)remotes} would be
# enough as file paths are not
# meant to be empty).
do
(
cd $local &&
hg pull $remote
)
done
Примечание :подсветка синтаксиса может вводить в заблуждение.