Вот версия, адаптированная из приведенной выше пары ответов, которая производит результаты в порядке, указанном в OP, и возвращает строки вместо массивов:
function *cartesianProduct(...arrays) {
if (!arrays.length) yield [];
else {
const [tail, ...head] = arrays.reverse();
const beginning = cartesianProduct(...head.reverse());
for (let b of beginning) for (let t of tail) yield b + t;
}
}
const first = ['a', 'b', 'c', 'd'];
const second = ['e'];
const third = ['f', 'g', 'h', 'i', 'j'];
console.log([...cartesianProduct(first, second, third)])
DIR=$( cd $(dirname [110]) ; pwd )
предположим, что ваш скрипт /home/lanzhiwang/work/py_web/multimediaapi_lab/pukep.py
$ 0 - это pukep.py
$ (dirname $ 0) - это / home / lanzhiwang / work / py_web / multimediaapi_lab /
cd / home / lanzhiwang / работа / py_web / multimediaapi_lab /
pwd
DIR = / home / lanzhiwang / работа / py_web / multimediaapi_lab /
Он определяет каталог, содержащий скрипт (который может отличаться от текущего рабочего каталога).
Обычно вы используете такой шаблон, если вам нужно ссылаться на файлы в одном каталоге:
# contents of myscript.sh
DIR=$( cd $(dirname [110]) ; pwd)
cat $DIR/some-file-next-to-my-script.txt
Затем из в любом месте в файловой системе:
/path/to/myscript.sh
фактически напечатает содержимое some-file-next-to-my-script.txt
. Если бы вы придерживались pwd
в одиночку, вы бы искали этот файл в вашем текущем рабочем каталоге, что может или не может быть тем поведением, которое вы хотите.
Разбивка команды:
$( cd $(dirname [112]); pwd)
^^^^^^^^^^
Идентифицирует каталог, содержащий [116]
. Если вы вызвали скрипт как /path/to/myscript.txt
, то dirname [118]
оценивается как /path/to
. Если вы вызвали его как ./myscript.txt
, то dirname [1111]
просто оценивается как .
.
$( cd $(dirname [113]); pwd)
^^^^^^^^^^^^^^^^^^^^ ^
Перейдите в каталог, как и раньше, но, что важно, в подоболочке , чтобы ваш рабочий каталог не был изменен.
Затем финал pwd
просто распечатывает этот текущий рабочий каталог, который будет всегда расширяться до полного пути. Это значение затем сохраняется в переменной DIR
в вашем примере.