![Bash 스크립트의 배열 길이 문제](https://linux55.com/image/91357/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20%EB%B0%B0%EC%97%B4%20%EA%B8%B8%EC%9D%B4%20%EB%AC%B8%EC%A0%9C.png)
일부 명령줄 매개 변수를 배열로 저장하고 나중에 배열을 사용하는 스크립트를 작성 중인데 스크립트에서 올바른 배열 길이를 가져오는 데 문제가 있습니다.
터미널에서 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=("${@}")
배열과 매개변수에 공백을 유지할 수 있습니다.
놓친 경우 첫 번째 인수가 분할되므로 "
이와 같은 내용은 길이 5를 반환합니다. 우리가 얻는 ./script.sh "a b" 2 3 4
대로"
$ 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