유형 변수와 다차원 배열을 지원하는 쉘이 있습니까?

유형 변수와 다차원 배열을 지원하는 쉘이 있습니까?

변수 유형과 다차원 배열의 구별을 지원하는 쉘이 있습니까?

최소한 문자열, 정수, 부동 소수점 및 double을 구별해야 합니다.

다음 명령은 달라야 합니다. command 1그리고 command "1"변수 유형이 지원되는지 여부입니다. fun(1)및 와 같은 ac 함수와 유사합니다 fun("1"). 또는 2개의 별도 쉘 및 호출 함수 구문이 있어야 합니다.

답변1

펄 쉘스칼라, 목록, 해시의 세 가지 유형의 변수가 지원됩니다.

Perl 셸(psh)은 bash 및 기타 셸의 측면을 Perl 스크립트의 기능과 결합합니다.

그리고

Perl 쉘은 Unix 쉘의 대화형 기능과 Perl의 강력한 기능을 결합한 쉘입니다. 목표는 정상적인 쉘 활동에서 예상한 대로 작동하는 완전한 기능의 쉘을 만드는 것입니다. 그러나 Perl Shell은 Perl 구문과 기능을 사용하여 제어 흐름 문과 기타 콘텐츠를 처리합니다.

문자열, 정수, 부동 소수점 및 복식을 크게 구별하지 않습니다.[1], Perl처럼 필요에 따라 원활하게 변환합니다.

자동 변환이 오류이거나 문자열, 숫자 및 정규식 비교에 대한 다른 연산자가 충분하지 않은 경우 쉘이 숫자와 문자열을 구별해야 하는 1이유를 알기 어렵습니다. 다른 껍질과 "1"마찬가지로 .bash

[1]다음과 같은 전문 모듈을 확인해 보세요.수학::BigFloat부동 소수점 유형에 특별한 처리가 필요한 경우. 또는수학::Bigint매우 큰 정수의 경우.

답변2

유형을 정확하게 구별하는 것과 빠른 입력을 허용하는 것 사이에는 긴장감이 있습니다. 쉘은 빠른 입력에 적합합니다. 쉘의 목적은 가능한 한 적은 문자를 사용하여 일회성 작업을 쉽게 완료할 수 있도록 하는 것입니다. 1숫자가 아닌 문자열(프로그램에 전달)을 원하므로 따옴표를 추가하는 것이 부담스러울 것입니다.

Ksh, bash 및 zsh에는 유형 변수가 있습니다. 그러나 이러한 변수는 추가 유효성 검사가 포함된 문자열일 뿐입니다. 정수 변수를 산술식이 아닌 값으로 설정하려고 하면 오류가 발생하거나 때로는 값이 0이 되는 경우가 있습니다(특히, 정의된 변수가 아닌 경우 유효한 식별자는 0으로 대체됩니다). 유효 하지 않은 경우 set -u).

$ integer n
$ n=3
$ echo $n
3
$ n=2+2
$ echo $n
4
$ n=undefined+1
$ echo $n
1
$ n='_!@()#(*#'
mksh: _!@()#(*#: unexpected '!'

Ksh93은 한 단계 더 나아가 사용자 정의 유형을 정의하고( 사용 typeset -T) 변수 값을 가져오고 설정하는 함수(규칙 함수라고 함)를 사용하여 잘못된 값을 거부할 수 있습니다. enum제한된 수의 허용 값으로 유형을 정의하기 위한 사전 정의된 도우미가 있습니다 .

$ enum day=(Sunday Monday Tuesday Wednesday Thursday Friday)
$ day d=Monday
$ echo $d
Monday
$ d=monday
ksh93: d:  invalid value monday

그러나 모든 값은 문자열로 투명하게 사용할 수 있습니다. 이를 원하지 않으면 자동으로 쉘로서의 언어 값을 줄입니다. 왜냐하면 쉘의 궁극적인 목적은 명령줄 인수가 문자열인 다른 프로그램을 실행하는 것이기 때문입니다. 그러나 일부 대화형 환경에서는 다른 프로그램을 시작하는 것이 기본 작업으로 간주되지 않으며 자동으로 문자열로 변환되지 않습니다. 나는 몇 가지를 나열했습니다.*nix용 객체 지향 셸

관련 정보