((;'echo“ $ @”')中分号(;)的含义是什么?

问题描述 投票:-1回答:2

Linux命令行和Shell脚本圣经[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 "$@"')位中是什么意思?并且是否需要单引号?

bash echo
2个回答
0
投票
分号用于在一个字符串中一个接一个地运行多个命令,而不用管道传递它们。

ls; echo ok; exit

但是这在var或数组中不起作用。

a="ls; echo ok" $ $a Command 'ls;' not found, did you mean: ...


0
投票
这是无效的语法;这本书似乎有复制粘贴错误或其他内容。

为了使示例执行文本所要尝试的操作,这:

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

应该就是这个:

newarray=("$@")

(没有;,没有',没有echo)。

另外,此:

testit ${myarray[*]}

应该是这个:

testit "${myarray[@]}"

(["@而不是*),以避免在数组元素包含空格或特殊字符时出现异常。 (通常,从我看过的几页来看,这本书似乎并没有演示健壮的代码;因此,即使对于在简单输入下尝试即可使用的示例,我也不建议过分信任在其中。)
© www.soinside.com 2019 - 2024. All rights reserved.