Я думаю, что ваше определение bash неправильно определено в сценарии.
Выход:
-bash: 1: command not found
Обычно относится к плохо написанному определению bash, убедитесь, что оно определено следующим образом в первой строке скрипта:
#!/bin/bash
Если местоположение bash отличается, вы также можете найти его с помощью:
which bash
Резюме :Эти две функции и способ их вызова различаются тем, где происходит операция map()
и что используется при сложении. Это имеет значение, так как в первом случае map()
в вызове заставляет сложение в функции использовать первый элемент каждого отдельного вложенного массива -входного массива. Во втором случае map()
выполняется внутри функции, а сложение использует весь первый подмассив -входного массива.
В первой функции
def addvalue(f):. + [f];
вы добавляете массив [f]
к тому, что предполагается массивом во входном потоке. Добавление массива в другой массив приводит к добавлению новых элементов в массив.
Вы вызываете эту addvalue()
функцию дважды, используя map()
; один раз для каждого из массивов [1,2]
и [10,20]
. В первом вызове [f]
будет [1]
, поэтому вы добавляете 1
в качестве нового элемента в первый массив, получая [1,2,1]
. Точно так же вы получаете [10,20,10]
из второго вызова, когда [f]
равно [10]
.
Добавление отладки в функцию,
def addvalue(f): debug |. + [f]
при вызове как в вопросе получаем следующее:
["DEBUG:",[1,2]]
["DEBUG:",[10,20]]
Это показывает, что функция вызывается дважды. Значение [f]
будет равно [1]
в первом вызове, что приведет к операции [1,2] + [1]
, дающей [1,2,1]
, и [10]
во втором вызове, где [10,20] + [10]
приведет к [10,20,10]
. Операция map()
в вызове объединит эти массивы в [[1,2,1],[10,20,10]]
.
В функции
def addvalue(f): f as $x | map(. + $x);
вы вызываете map()
для того, что предполагается массивом во входном потоке. Для каждого элемента входного массива вы добавляете $x
к этому элементу. Значение $x
— это первый элемент массива.
Вы вызываете эту функцию один раз, используя массив [[1,2],[10,20]]
в качестве входного массива и [1,2]
в качестве аргумента. Для каждого из элементов входного массива, то есть для [1,2]
и [10,20]
, вы добавляете[1,2]
(значение $x
, первого элемента массива ). Добавление массива к другому массиву приводит к добавлению элементов массивов друг к другу, поэтому вы получаете [1,2,1,2]
и [10,20,1,2]
как два элемента результирующего массива.
Включение отладки во второй функции аналогично первой,
def addvalue(f): debug | f as $x | map(. + $x);
получаем на выходе
["DEBUG:",[[1,2],[10,20]]]
Это показывает, что функция вызывается один раз. Операция map()
создаст массив, в котором каждый элемент входного массива имеет [1,2]
, добавленное к самому себе, давая в результате [[1,2,1,2],[10,20,1,2]]
.
Чтобы первая функция работала как вторая, вам нужно вызвать ее, используя
.[0] as $x | map(addvalue($x[]))
Чтобы вторая функция работала как первая,вам нужно было бы назвать это как
[.[] as $x | [$x] | addvalue([$x[0]]) | add ]