Что означает точка с запятой (;) в (; 'echo "$ @"')? - PullRequest
0 голосов
/ 19 января 2020

Linux Библия сценариев командной строки и сценариев , [ 1 ] стр. 462, дает приведенный ниже пример передачи массива в функцию путем передачи его отдельные значения в качестве параметров функции и повторная сборка их в массив внутри функции:

$ cat test10
#!/bin/bash
# array variable to function test

function testit {
   local newarray
   newarray=(;'echo "$@"')
   echo "The new array value is: ${newarray[*]}"
}

myarray=(1 2 3 4 5)
echo "The original array is ${myarray[*]}"
testit ${myarray[*]}
$
$ ./test10
The original array is 1 2 3 4 5
The new array value is: 1 2 3 4 5
$

Что означает ; в бите newarray=(;'echo "$@"')?
И нужны одинарные кавычки?

Ответы [ 2 ]

0 голосов
/ 21 января 2020

Это неверный синтаксис; в книге, похоже, есть ошибка копирования-вставки или что-то в этом роде.

Чтобы пример делал то, что говорит текст, он пытается это сделать:

   newarray=(;'echo "$@"')

должно быть именно таким :

   newarray=("$@")

(нет ;, нет ', нет echo).

Кроме того, это:

testit ${myarray[*]}

должно быть следующим:

testit "${myarray[@]}"

(", @ вместо *), чтобы избежать неправильной работы, когда элемент массива содержит пробел или специальные символы. (В целом, из нескольких страниц, которые я просмотрел, эта книга, похоже, не демонстрирует надежный код; поэтому даже для примеров, которые будут работать, если вы попробуете их на простых входных данных, я не рекомендую слишком доверять в них.)

0 голосов
/ 20 января 2020

Точки с запятой используются для запуска нескольких команд в одной строке одна за другой, без их передачи по трубам.

ls; echo ok; exit

Но это не сработает из var или массива.

a="ls; echo ok"
$ $a

Command 'ls;' not found, did you mean:
...
...