我正在编写一个脚本,将一些命令行参数存储为数组,并稍后使用该数组,但在脚本中获取数组的正确长度时遇到问题。
在终端中,使用 bash,我尝试了以下操作:
$:>array=( 1 2 3 4 ) $:>echo array = ${array[*]} and length = ${#array[*]}
echo 的输出是:
array = 1 2 3 4 and length = 4
哪个工作正常。我简化了我遇到问题的脚本,该脚本应该做完全相同的事情,但我得到的数组长度为 1。脚本如下。
#!/bin/bash list=${@} echo array = ${list[*]} and length = ${#list[*]}
如果我从终端调用脚本
$:>./script.sh ${test[*]}
输出是
array = 1 2 3 4 and length = 1
我尝试了几种不同的方法来保存数组并将其打印出来,但我不知道如何解决这个问题。任何解决方案将不胜感激!
答案1
您将输入扁平化为单个值。
你应该做
list=("${@}")
维护数组和参数中空格的可能性。
如果您错过了,"
则类似的内容./script.sh "a b" 2 3 4
将返回长度 5,因为第一个参数将被拆分。随着"
我们得到
$ cat x
#!/bin/bash
list=("${@}")
echo array = ${list[*]} and length = ${#list[*]}
$ ./x "a b" 2 3 4
array = a b 2 3 4 and length = 4