>

${#array[@]} 에 대해 말할 수있는 한  그리고 ${#array}   $array 의 요소 수로 평가 . 더 긴 형식을 선호하는 이유가 있습니까 ( ${#array[@]} ) )?

  • 답변 # 1

    zsh에서는 개인 취향. 다른 포탄 $array  첫 번째 요소까지만 확장 할 수 있으므로 ${#array}  첫 번째 요소의 길이를 출력합니다.

    따라서 [@] 를 지정하는 쉘 사이에서 좀 더 이식성이 좋으려면  작동합니다.

    zsh에서 $array  같은 방식으로 $array[*] 확장  따옴표 안에 표시되는지 여부에 따라 다릅니다. 큰 따옴표 안에 표시해야합니다   "$array" 의 첫 문자로 확장되고 구분됩니다.  기본적으로 공백입니다

    IFS
    
    

    와이즈 비즈의 변화  원래의 "개인 취향"응답을 유발 한 경우는 거의 없습니다. 그러나 zsh% touch {1..10}; a=(*) zsh% printf '<%s> ' $a <1> <10> <2> <3> <4> <5> <6> <7> <8> <9> zsh% printf '<%s> ' "$a" <1 10 2 3 4 5 6 7 8 9> zsh% IFS=: zsh% print "$a" 1:10:2:3:4:5:6:7:8:9 zsh% print "$a[@]" 1 10 2 3 4 5 6 7 8 9 zsh% IFS=$' \t\n' zsh% rm "$a" rm: cannot remove ‘1 10 2 3 4 5 6 7 8 9’: No such file or directory 없이 사용했을 때 둘 사이에 약간의 차이점이 있음을 분명히하기 위해  플래그, 그들은 매우 미묘합니다.

    나는 IFS 를 선호한다  또한 따옴표 안에 표시되는지 여부에 따라 동작이 변경되지 않기 때문입니다. 요소와 내부 공백이 유지됩니다.

  • 답변 # 2

    어떤 것이 든, 코드를 더 읽기 쉽고 이해하기 쉽기 때문에 다른 사람 (또는 미래의 사용자)이 더 쉽게 유지할 수 있습니다. 선택 사항이 있고 그 중 하나가 모호한 경우 다른 하나를 선택하십시오.

    또한, 쉘 스크립트에서 이식성을 원한다면 후자는 # 에서 제대로 작동하는 유일한 스크립트입니다. .

  • 답변 # 3

    어레이를 지원하는 대부분의 쉘에서 ( $array[@] 에서 테스트했습니다) bash  그리고 bash ), ksh93   pdksh 의 길이를 줄 것이다 및 ${#array}  배열의 요소 수를 제공합니다. 논리적입니다 : ${array[0]}   ${#array[@]} 요소를 반환  배열과 "${array}"  길이를 돌려줍니다.

    0

  • 이전 text - 파일이 CRLF 또는 LF를 사용하여 줄을 종료하는지 확인
  • 다음 linux mint - Tmux를 시작할 때 소리가납니다 어떻게 비활성화 할 수 있습니까?