Bash 스크립트의 배열 길이 문제

Bash 스크립트의 배열 길이 문제

일부 명령줄 매개 변수를 배열로 저장하고 나중에 배열을 사용하는 스크립트를 작성 중인데 스크립트에서 올바른 배열 길이를 가져오는 데 문제가 있습니다.

터미널에서 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

관련 정보