데이터 유형
전통적인 유닉스 셸 명령은 텍스트 문자열을 사용하여 서로 통신합니다. 한 명령은 표준 출력(종종 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