데이터 유형
전통적인 유닉스 셸 명령은 텍스트 문자열을 사용하여 서로 통신합니다. 한 명령은 표준 출력(종종 stdout으로 축약됨)에 텍스트를 쓰고 다른 명령은 표준 입력(또는 stdin)에서 텍스트를 읽습니다. 이를 통해 여러 명령을 함께 결합하여 "파이프라인"이라고 하는 것을 통해 통신할 수 있습니다.
누셸은 이 접근 방식을 수용하고 문자열 외에 다른 유형의 데이터를 포함하도록 확장합니다.
많은 프로그래밍 언어와 마찬가지로 Nu는 간단하고 구조화된 데이터 유형 집합을 사용하여 데이터를 모델링합니다. 간단한 데이터 유형에는 정수, 부동 소수점, 문자열 및 부울이 포함됩니다. 날짜, 파일 크기 및 시간 기간에 대한 특수 유형도 있습니다.
describe 명령은 데이터 값의 유형을 반환합니다.
42 | describe
# => int한눈에 보는 유형
| 유형 | 예시 |
|---|---|
| 정수 | -65535 |
| 부동 소수점 (소수) | 9.9999, Infinity |
| 문자열 | "hole 18", 'hole 18', `hole 18`, hole18, r#'hole18'# |
| 부울 | true |
| 날짜 | 2000-01-01 |
| 기간 | 2min + 12sec |
| 파일 크기 | 64mb |
| 범위 | 0..4, 0..<5, 0.., ..4 |
| 이진 | 0x[FE FF] |
| 목록 | [0 1 'two' 3] |
| 레코드 | {name:"Nushell", lang: "Rust"} |
| 테이블 | [{x:12, y:15}, {x:8, y:9}], [[x, y]; [12, 15], [8, 9]] |
| 클로저 | {|e| $e + 1 | into string }, { $in.name.0 | path exists } |
| 셀 경로 | $.name.0 |
| 블록 | if true { print "hello!" }, loop { print "press ctrl-c to exit" } |
| Null (Nothing) | null |
| Any | let p: any = 5 |
기본 데이터 유형
정수
| 설명: | 소수 부분이 없는 숫자(양수, 음수 및 0) |
| 주석: | int |
| 리터럴 구문: | 소수점이 없는 10진수, 16진수, 8진수 또는 2진수 숫자 값입니다. 예: -100, 0, 50, +50, 0xff (16진수), 0o234 (8진수), 0b10101 (2진수) |
| 참조: | 언어 참조 - 정수 |
간단한 예:
10 / 2
# => 5
5 | describe
# => int부동 소수점/소수
| 설명: | 소수 부분이 있는 숫자 |
| 주석: | float |
| 리터럴 구문: | 소수점이 포함된 10진수 숫자 값입니다. 예: 1.5, 2.0, -15.333 |
| 참조: | 언어 참조 - 부동 소수점 |
간단한 예:
2.5 / 5.0
# => 0.5팁
대부분의 프로그래밍 언어와 마찬가지로 누셸의 소수 값은 근사치입니다.
10.2 * 5.1
# => 52.01999999999999텍스트/문자열
| 설명: | 텍스트를 나타내는 일련의 문자 |
| 주석: | string |
| 리터럴 구문: | 문자열 작업 참조 |
| 참조: | 문자열 처리 |
| 언어 참조 - 문자열 |
많은 언어와 마찬가지로 누셸은 문자열 값을 지정하는 여러 가지 방법과 문자열로 작업하기 위한 수많은 명령을 제공합니다.
간단한 (의무적인) 예:
let audience: string = "World"
$"Hello, ($audience)"
# => Hello, World부울
| 설명: | 참 또는 거짓 값 |
| 주석: | bool |
| 리터럴 구문: | 리터럴 true 또는 false |
| 참조: | 언어 참조 - 부울 |
부울은 일반적으로 비교의 결과입니다. 예시:
let mybool: bool = (2 > 1)
$mybool
# => true
let mybool: bool = ($env.HOME | path exists)
$mybool
# => true부울 결과는 일반적으로 실행 흐름을 제어하는 데 사용됩니다.
let num = -2
if $num < 0 { print "It's negative" }
# => It's negative날짜
| 설명: | 국제 표준 날짜-시간 설명자를 사용하여 특정 시점을 나타냅니다. |
| 주석: | datetime |
| 리터럴 구문: | 언어 가이드 - 날짜 참조 |
간단한 예:
date now
# => Mon, 12 Aug 2024 13:59:22 -0400 (now)
# 유닉스 에포크로 포맷
date now | format date '%s'
# => 1723485562기간
| 설명: | 시간의 경과 단위를 나타냅니다. |
| 주석: | duration |
| 리터럴 구문: | 언어 참조 - 기간 |
기간은 소수 값과 계산을 지원합니다.
간단한 예:
3.14day
# => 3day 3hr 21min
30day / 1sec # 30일은 몇 초입니까?
# => 2592000파일 크기
| 설명: | 파일 크기 또는 바이트 수를 나타내는 특수 숫자 유형 |
| 주석: | filesize |
| 리터럴 구문: | 언어 참조 - 파일 크기 |
누셸에는 파일 크기에 대한 특수 유형도 있습니다.
기간과 마찬가지로 누셸은 소수 파일 크기와 계산을 지원합니다.
0.5kB
# => 500 B
1GiB / 1B
# => 1073741824
(1GiB / 1B) == 2 ** 30
# => true단위 및 자세한 내용의 전체 목록은 언어 참조를 참조하십시오.
범위
| 설명: | 시작 값에서 끝 값까지의 값 범위를 선택적 보폭으로 설명합니다. |
| 주석: | range |
| 리터럴 구문: | <start_value>..<end_value>. 예: 1..10. |
<start_value>..<second_value>..<end_value>. 예: 2..4..20 | |
| 참조: | 언어 가이드 - 범위 |
간단한 예:
1..5
# => ╭───┬───╮
# => │ 0 │ 1 │
# => │ 1 │ 2 │
# => │ 2 │ 3 │
# => │ 3 │ 4 │
# => │ 4 │ 5 │
# => ╰───┴───╯셀 경로
| 설명: | 구조화된 값의 내부 값으로 이동하는 데 사용되는 표현식입니다. |
| 주석: | cell-path |
| 리터럴 구문: | 점으로 구분된 행(정수) 및 열(문자열) ID 목록입니다. 예: name.4.5. |
선택적으로 변수에 셀 경로를 할당하는 경우와 같이 명확성을 위해 선행 $.를 사용합니다. | |
| 참조: | 언어 참조 - 셀 경로 |
| 구조화된 데이터 탐색 및 액세스 장. |
간단한 예:
let cp = $.2
# 인덱스 2의 목록 항목 반환
[ foo bar goo glue ] | get $cp
# => goo클로저
| 설명: | 익명 함수, 종종 람다 함수라고 하며, 매개변수를 받고 범위 외부의 변수를 닫습니다(즉, 사용합니다). |
| 주석: | closure |
| 리터럴 구문: | {|args| expressions } |
| 참조: | 언어 참조 - 클로저 |
간단한 예:
이 클로저는 비교의 부울 결과를 반환한 다음 where 명령에서 사용하여 5보다 큰 모든 값을 반환합니다.
let compare_closure = {|a| $a > 5 }
let original_list = [ 40 -4 0 8 12 16 -16 ]
$original_list | where $compare_closure
# => ╭───┬────╮
# => │ 0 │ 40 │
# => │ 1 │ 8 │
# => │ 2 │ 12 │
# => │ 3 │ 16 │
# => ╰───┴────╯클로저는 필터를 통해 각 데이터 행에서 실행될 수 있는 코드를 나타내는 유용한 방법입니다.
이진 데이터
| 설명: | 이진 데이터를 나타냅니다. |
| 주석: | binary |
| 리터럴 구문: | 0x[ffffffff] - 16진수 기반 이진 표현 |
0o[1234567] - 8진수 기반 이진 표현 | |
0b[10101010101] - 2진수 기반 이진 표현 | |
| 참조: | 언어 가이드 - 이진 |
이미지 파일의 데이터와 같은 이진 데이터는 원시 바이트 그룹입니다.
간단한 예 - JPEG 파일이 올바른 식별자로 시작하는지 확인합니다.
open nushell_logo.jpg
| into binary
| first 2
| $in == 0x[ff d8]
# => true구조화된 데이터 유형
누셸은 위의 기본 유형을 포함할 수 있는 구조화된 데이터 유형 모음을 포함합니다. 예를 들어, 단일 float 대신 구조화된 데이터는 동일한 값에 온도 측정값의 list와 같이 여러 float 값을 나타내는 방법을 제공합니다. 누셸은 다음 구조화된 데이터 유형을 지원합니다.
목록
| 설명: | 모든 유형의 0개 이상의 값의 순서 있는 시퀀스 |
| 주석: | list |
| 리터럴 구문: | 언어 가이드 - 목록 |
| 참조: | 목록 작업 |
| 구조화된 데이터 탐색 및 액세스 |
간단한 예:
[Sam Fred George]
# => ╭───┬────────╮
# => │ 0 │ Sam │
# => │ 1 │ Fred │
# => │ 2 │ George │
# => ╰───┴────────╯레코드
| 설명: | 문자열 키를 다양한 데이터 값과 연결하는 키-값 쌍을 보유합니다. |
| 주석: | record |
| 리터럴 구문: | 언어 가이드 - 레코드 |
| 참조: | 레코드 작업 |
| 구조화된 데이터 탐색 및 액세스 |
간단한 예:
let my_record = {
name: "Kylian"
rank: 99
}
$my_record
# => ╭───────┬────────────╮
# => │ name │ Kylian │
# => │ rank │ 99 │
# => ╰───────┴────────────╯
$my_record | get name
# => Kylian테이블
| 설명: | 각 셀이 모든 기본 또는 구조화된 데이터 유형을 보유할 수 있는 열과 행이 모두 있는 2차원 컨테이너 |
| 주석: | table |
| 참조: | 테이블 작업 |
| 구조화된 데이터 탐색 및 액세스 | |
| 언어 가이드 - 테이블 |
테이블은 누셸의 핵심 데이터 구조입니다. 명령을 실행하면 많은 명령이 출력으로 테이블을 반환하는 것을 볼 수 있습니다. 테이블에는 행과 열이 모두 있습니다.
팁
내부적으로 테이블은 단순히 레코드 목록입니다. 즉, 테이블의 특정 행을 추출하거나 격리하는 모든 명령은 레코드를 생성합니다. 예를 들어, 목록에서 사용될 때 get 0은 첫 번째 값을 추출합니다. 그러나 테이블(레코드 목록)에서 사용될 때 레코드를 추출합니다.
[{x:12, y:5}, {x:3, y:6}] | get 0
# => ╭───┬────╮
# => │ x │ 12 │
# => │ y │ 5 │
# => ╰───┴────╯기타 데이터 유형
Any
| 설명: | 유형 주석 또는 서명에서 사용될 때 모든 유형과 일치합니다. 즉, 다른 유형의 "상위 집합"입니다. |
| 주석: | any |
| 리터럴 구문: | 해당 없음 - 모든 리터럴 값을 any 유형에 할당할 수 있습니다. |
| 참조: | 언어 참조 - Any |
블록
| 설명: | 일부 누셸 키워드(예: if 및 for)에서 사용하는 구문 형식 |
| 주석: | 해당 없음 |
| 리터럴 구문: | 해당 없음 |
| 참조: | 언어 참조 - 블록 |
간단한 예:
if true { print "It's true" }위의 { print "It's true" } 부분은 블록입니다.
Nothing (Null)
| 설명: | nothing 유형은 다른 값이 없음을 나타내는 데 사용됩니다. |
| 주석: | nothing |
| 리터럴 구문: | null |
| 참조: | 언어 참조 - Nothing |
간단한 예
선택적 연산자 ?를 사용하면 요청된 셀 경로가 없는 경우 null을 반환합니다.
let simple_record = { a: 5, b: 10 }
$simple_record.a?
# => 5
$simple_record.c?
# => 아무것도 출력되지 않음
$simple_record.c? | describe
# => nothing
$simple_record.c? == null
# => true