Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Catatan editorial
Penting
Spesifikasi Bahasa Windows PowerShell 3.0 diterbitkan pada Desember 2012 dan didasarkan pada Windows PowerShell 3.0. Spesifikasi ini tidak mencerminkan status PowerShell saat ini. Tidak ada rencana untuk memperbarui dokumentasi ini untuk mencerminkan status saat ini. Dokumentasi ini disajikan di sini untuk referensi historis.
Dokumen spesifikasi tersedia sebagai dokumen Microsoft Word dari Pusat Unduh Microsoft di: https://www.microsoft.com/download/details.aspx?id=36389 Dokumen Word telah dikonversi untuk presentasi di sini di Microsoft Pelajari. Selama konversi, beberapa perubahan editorial telah dilakukan untuk mengakomodasi pemformatan untuk platform Dokumen. Beberapa kesalahan ketik dan kesalahan kecil telah dikoreksi.
2.1 Tata Bahasa
Spesifikasi ini memperlihatkan sintaks bahasa PowerShell menggunakan dua tata bahasa. Tata bahasa leksikal (§B.1) menunjukkan bagaimana karakter Unicode digabungkan untuk membentuk terminator baris, komentar, spasi kosong, dan token. Tata bahasa sintetis (§B.2) menunjukkan bagaimana token yang dihasilkan dari tata bahasa leksikal digabungkan untuk membentuk skrip PowerShell.
Untuk kenyamanan, fragmen tata bahasa ini direplikasi di tempat yang sesuai di seluruh spesifikasi ini.
Setiap penggunaan karakter 'a' sampai 'z' dalam tata bahasa tidak peka terhadap huruf besar dan kecil. Ini berarti bahwa huruf besar/kecil dalam variabel, alias, nama fungsi, kata kunci, pernyataan, dan operator diabaikan. Namun, sepanjang spesifikasi ini, nama-nama tersebut ditulis dalam huruf kecil, kecuali untuk beberapa variabel otomatis dan preferensi.
2.2 Analisis leksikal
2.2.1 Skrip
Sintaksis:
Petunjuk / Saran
Notasi ~opt~ dalam definisi sintaks menunjukkan bahwa entitas leksikal bersifat opsional dalam sintaks.
input:
input-elements~opt~ signature-block~opt~
input-elements:
input-element
input-elements input-element
input-element:
whitespace
comment
token
signature-block:
signature-begin signature signature-end
signature-begin:
new-line-character # SIG # Begin signature block new-line-character
signature:
base64 encoded signature blob in multiple single-line-comments
signature-end:
new-line-character # SIG # End signature block new-line-character
Deskripsi:
Aliran sumber input ke penerjemah PowerShell adalah input dalam skrip, yang berisi urutan karakter Unicode. Pemrosesan leksikal dari aliran ini melibatkan pengurangan karakter-karakter tersebut menjadi urutan token, yang kemudian menjadi masukan analisis sintaksis.
Skrip adalah sekelompok perintah PowerShell yang disimpan dalam file skrip. Skrip itu sendiri sebenarnya tidak memiliki nama dan mengambil namanya dari file sumbernya. Akhir file tersebut menunjukkan akhir skrip.
Skrip dapat secara opsional berisi tanda tangan digital. Lingkungan host tidak diperlukan untuk memproses teks apa pun yang mengikuti tanda tangan atau apa pun yang terlihat seperti tanda tangan. Pembuatan dan penggunaan tanda tangan digital tidak tercakup dalam spesifikasi ini.
Pemisah baris
Sintaksis:
new-line-character:
Carriage return character (U+000D)
Line feed character (U+000A)
Carriage return character (U+000D) followed by line feed character (U+000A)
new-lines:
new-line-character
new-lines new-line-character
Deskripsi:
Kehadiran karakter baris baru dalam aliran sumber input membaginya menjadi baris yang dapat digunakan untuk hal-halseperti pelaporan kesalahan dan deteksi akhir komentar baris tunggal.
Penghenti baris dapat diperlakukan sebagai spasi putih (§2.2.4).
2.2.3 Komentar
Sintaksis:
comment:
single-line-comment
requires-comment
delimited-comment
single-line-comment:
# input-characters~opt~
input-characters:
input-character
input-characters input-character
input-character:
Any Unicode character except a new-line-character
requires-comment:
#Requires whitespace command-arguments
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
dashdash:
dash dash
delimited-comment:
< # delimited-comment-text~opt~ hashes >
delimited-comment-text:
delimited-comment-section
delimited-comment-text delimited-comment-section
delimited-comment-section:
>
hashes~opt~ not-greater-than-or-hash
hashes:
#
hashes #
not-greater-than-or-hash:
Any Unicode character except > or #
Deskripsi:
Kode sumber dapat diannotasi dengan penggunaan komentar.
Komentar satu baris dimulai dengan karakter # dan diakhir dengan karakter baris baru.
Komentar dibatasi dimulai dengan pasangan karakter <# dan diakhiri dengan pasangan karakter #>.
Ini dapat terjadi sebagai bagian dari baris sumber, sebagai seluruh baris sumber, atau dapat menjangkau sejumlah baris sumber.
Komentar diperlakukan sebagai spasi kosong.
Produksi di atas menyiratkan bahwa
- Komentar tidak bersarang.
- Urutan karakter <# dan #> tidak memiliki arti khusus dalam komentar satu baris.
- Karakter # tidak memiliki arti khusus dalam komentar yang dibatasi.
Tata bahasa leksikal menyiratkan bahwa komentar tidak dapat terjadi di dalam token.
(Lihat §A untuk informasi tentang membuat file skrip yang berisi komentar bernilai khusus yang digunakan untuk menghasilkan dokumentasi dari file skrip.)
Requires-comment menentukan kriteria yang harus dipenuhi agar skrip yang berisinya diizinkan untuk dijalankan. Kriteria utama adalah versi PowerShell yang digunakan untuk menjalankan skrip. Persyaratan versi minimum ditentukan sebagai berikut:
#Requires -Version N[.n]
Di mana N adalah versi utama (wajib) dan n adalah versi minor (opsional).
Komentar yang diperlukan dapat ada dalam file skrip apa pun; namun, tidak dapat ada di dalam fungsi atau cmdlet. Ini harus menjadi item pertama pada baris sumber. Skrip dapat berisi beberapa memerlukan komentar.
Urutan karakter hanya dikenali sebagai komentar jika urutan tersebut dimulai dengan # atau <#. Misalnya, hello#there dianggap sebagai satu token tunggal sedangkan hello #there dianggap sebagai token hello yang diikuti dengan komentar satu baris. Selain mengikuti spasi kosong, urutan awal komentar juga dapat didahului oleh karakter penghentian ekspresi atau penghentian pernyataan (seperti ), , }], ', ", atau ;).
Komentar yang diperlukan tidak dapat ada di dalam snap-in.
Ada empat bentuk lain dari wajib komentar:
#Requires -Assembly AssemblyId
#Requires -Module ModuleName
#Requires -PSSnapin PSSnapin [ -Version *N* [.n] ]
#Requires -ShellId ShellId
2.2.4 Spasi kosong
Sintaksis:
whitespace:
Any character with Unicode class Zs, Zl, or Zp
Horizontal tab character (U+0009)
Vertical tab character (U+000B)
Form feed character (U+000C)
` (The backtick character U+0060) followed by new-line-character
Deskripsi:
Spasi kosong terdiri dari urutan apa pun dari satu atau beberapa karakter spasi kosong .
Kecuali untuk fakta bahwa spasi kosong dapat bertindak sebagai pemisah untuk token, itu diabaikan.
Tidak seperti beberapa bahasa populer, PowerShell tidak menganggap karakter terminator baris (§2.2.2) sebagai spasi kosong. Namun, pemutus baris dapat diperlakukan sebagai ruang kosong dengan mendahului karakter backtick, ` (U+0060). Ini diperlukan ketika konten baris selesai secara sintetis, namun baris berikut berisi token yang dimaksudkan untuk dikaitkan dengan baris sebelumnya. Contohnya,
$number = 10 # assigns 10 to $number; nothing is written to the pipeline
+ 20 # writes 20 to the pipeline
- 50 # writes -50 to the pipeline
$number # writes $number's value, 10, to the pipeline
Dalam contoh ini, tanda backtick menandakan garis sumber dilanjutkan. Ekspresi berikut setara dengan $number = 10 + 20 - 50.
$number = 10 `
+ 20 `
- 50
$number # writes $number's value to the pipeline
-20
2.3 Token
Sintaksis:
token:
keyword
variable
command
command-parameter
command-argument-token
integer-literal
real-literal
string-literal
type-literal
operator-or-punctuator
Deskripsi:
Token adalah elemen leksikal terkecil dalam bahasa PowerShell.
Token dapat dipisahkan oleh baris baru, komentar, spasi kosong, atau kombinasinya.
2.3.1 Kata Kunci
Sintaksis:
keyword: one of
begin break catch class
continue data define do
dynamicparam else elseif end
exit filter finally for
foreach from function if
in inlinescript parallel param
process return switch throw
trap try until using
var while workflow
Deskripsi:
Kata kunci adalah urutan karakter yang memiliki arti khusus saat digunakan di tempat yang bergantung pada konteks. Paling sering, ini adalah sebagai token pertama dalam pernyataan; namun, ada lokasi lain, seperti yang ditunjukkan oleh tata bahasa. (Token yang terlihat seperti kata kunci, tetapi tidak digunakan dalam konteks kata kunci, adalah nama perintah atau argumen perintah.)
Kata kunci class, define, from, using, dan var dicadangkan untuk digunakan di masa mendatang.
Nota
Catatan Editor: Kata kunci class dan using diperkenalkan di PowerShell 5.0. Lihat about_Classes dan about_Using.
2.3.2 Variabel
Sintaksis:
variable:
$$
$?
$^
$ variable-scope~opt~ variable-characters
@ variable-scope~opt~ variable-characters
braced-variable
braced-variable:
${ variable-scope~opt~ braced-variable-characters }
variable-scope:
Global:
Local:
Private:
Script:
Using:
Workflow:
variable-namespace
variable-namespace:
variable-characters :
variable-characters:
variable-character
variable-characters variable-character
variable-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
_ (The underscore character U+005F)
?
braced-variable-characters:
braced-variable-character
braced-variable-characters braced-variable-character
braced-variable-character:
Any Unicode character except
} (The closing curly brace character U+007D)
` (The backtick character U+0060)
escaped-character
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Deskripsi:
Variabel dibahas secara rinci dalam (§5). Variabel $? dibahas dalam §2.3.2.2. Cakupan dibahas dalam §3.5.
Variabel $$ dan $^ dicadangkan untuk digunakan di lingkungan interaktif, yang berada di luar cakupan spesifikasi ini.
Ada dua cara menulis nama variabel: nama variabel berkurung kurawal, yang dimulai dengan $, diikuti dengan sekumpulan karakter yang dibatasi oleh kurung kurawal dari satu atau beberapa karakter yang hampir sewenang-wenang; dan nama variabel biasa, yang juga dimulai dengan $, diikuti oleh satu atau beberapa karakter dari kumpulan karakter yang lebih terbatas dibandingkan dengan yang diizinkan oleh nama variabel berkurung kurawal. Setiap nama variabel biasa dapat diekspresikan menggunakan nama variabel diberi kurung yang sesuai.
$totalCost
$Maximum_Count_26
$végösszeg # Hungarian
$итог # Russian
$総計 # Japanese (Kanji)
${Maximum_Count_26}
${Name with`twhite space and `{punctuation`}}
${E:\\File.txt}
Tidak ada batasan panjang nama variabel, semua karakter dalam nama variabel signifikan, dan huruf tidak berbeda.
Ada beberapa jenis variabel yang berbeda: ditentukan pengguna (§2.3.2.1), otomatis (§2.3.2.2), dan preferensi (§2.3.2.3). Semuanya dapat berdampingan dalam cakupan yang sama (§3,5).
Pertimbangkan definisi fungsi dan panggilan berikut:
function Get-Power ([long]$Base, [int]$Exponent) { ... }
Get-Power 5 3 # $Base is 5, $Exponent is 3
Get-Power -Exponent 3 -Base 5 # " " "
Setiap argumen diteruskan berdasarkan posisi atau nama, satu per satu. Namun, sekumpulan argumen dapat diteruskan sebagai grup dengan ekspansi ke dalam argumen individual yang ditangani oleh lingkungan runtime. Ekspansi argumen otomatis ini dikenal sebagai splatting. Contohnya,
$values = 5,3 # put arguments into an array
Get-Power @values
$hash = @{ Exponent = 3; Base = 5 } # put arguments into a Hashtable
Get-Power @hash
function Get-Power2 { Get-Power @args } # arguments are in an array
Get-Power2 -Exponent 3 -Base 5 # named arguments splatted named in
@args
Get-Power2 5 3 # position arguments splatted positionally in @args
Ini dicapai dengan menggunakan @ alih-alih $ sebagai karakter pertama variabel yang diteruskan.
Notasi ini hanya dapat digunakan dalam argumen ke perintah.
Nama dipartisi ke dalam berbagai namespace yang masing-masing disimpan pada drive virtual (§3.1). Misalnya, variabel disimpan pada Variable:, variabel lingkungan disimpan pada Env:, fungsi disimpan di Function:, dan alias disimpan di Alias:. Semua nama ini dapat diakses sebagai variabel menggunakan produksi namespace variabel dalam cakupan variabel. Contohnya,
function F { "Hello from F" }
$Function:F # invokes function F
Set-Alias A F
$Alias:A # invokes function F via A
$Count = 10
$Variable:Count # accesses variable Count
$Env:PATH # accesses environment variable PATH
Setiap penggunaan nama variabel dengan namespace eksplisit Variable: setara dengan penggunaan nama variabel yang sama tanpa kualifikasi tersebut. Misalnya, $v dan $Variable:v dapat dipertukarkan.
Selain didefinisikan dalam bahasa, variabel juga dapat didefinisikan oleh cmdlet New-Variable.
2.3.2.1 Variabel yang ditentukan pengguna
Nama variabel apa pun yang diizinkan oleh tata bahasa tetapi tidak digunakan oleh variabel otomatis atau preferensi tersedia untuk variabel yang ditentukan pengguna.
Variabel yang ditentukan pengguna dibuat dan dikelola oleh skrip yang ditentukan pengguna.
2.3.2.2 Variabel otomatis
Variabel otomatis menyimpan informasi status tentang lingkungan PowerShell. Nilainya dapat dibaca dalam skrip yang ditulis pengguna tetapi tidak ditulis.
Nota
Tabel yang awalnya ditemukan dalam dokumen ini dihapus untuk mengurangi duplikasi. Untuk daftar lengkap variabel otomatis, lihat about_Automatic_Variables.
2.3.2.3 Variabel preferensi
Variabel preferensi menyimpan preferensi pengguna untuk sesi tersebut. Mereka dibuat dan diinisialisasi oleh lingkungan runtime PowerShell. Nilainya dapat dibaca dan ditulis dalam skrip yang ditulis pengguna.
Nota
Tabel yang awalnya ditemukan dalam dokumen ini dihapus untuk mengurangi duplikasi. Untuk daftar lengkap variabel preferensi, lihat about_Preference_Variables.
2.3.3 Perintah
Sintaksis:
generic-token:
generic-token-parts
generic-token-parts:
generic-token-part
generic-token-parts generic-token-part
generic-token-part:
expandable-string-literal
verbatim-here-string-literal
variable
generic-token-char
generic-token-char:
Any Unicode character except
{ } ( ) ; , | & $
` (The backtick character U+0060)
double-quote-character
single-quote-character
whitespace
new-line-character
escaped-character
generic-token-with-subexpr-start:
generic-token-parts $(
2.3.4 Parameter
Sintaksis:
command-parameter:
dash first-parameter-char parameter-chars colon~opt~
first-parameter-char:
A Unicode character of classes Lu, Ll, Lt, Lm, or Lo
_ (The underscore character U+005F)
?
parameter-chars:
parameter-char
parameter-chars parameter-char
parameter-char:
Any Unicode character except
{ } ( ) ; , \| & . [
colon
whitespace
new-line-character
colon:
: (The colon character U+003A)
verbatim-command-argument-chars:
verbatim-command-argument-part
verbatim-command-argument-chars verbatim-command-argument-part
verbatim-command-argument-part:
verbatim-command-string
& non-ampersand-character
Any Unicode character except
|
new-line-character
non-ampersand-character:
Any Unicode character except &
verbatim-command-string:
double-quote-character non-double-quote-chars
double-quote-character
non-double-quote-chars:
non-double-quote-char
non-double-quote-chars non-double-quote-char
non-double-quote-char:
Any Unicode character except
double-quote-character
Deskripsi:
Saat perintah dipanggil, informasi dapat diteruskan melalui satu atau beberapa argumen yang nilainya diakses dari dalam perintah melalui sekumpulan parameter yang sesuai. Proses pencocokan parameter ke argumen disebut pengikatan parameter.
Ada tiga jenis argumen:
[switch]parameter (§8.10.5) -- Ini memiliki parameter perintah formulir di mana first-parameter-char dan parameter-chars bersama-sama membentuk nama sakelar, yang sesuai dengan nama parameter (tanpa leading-nya-) dalam perintah yang dipanggil. Jika titik dua berikutnya dihilangkan, kehadiran argumen ini menunjukkan bahwa parameter yang sesuai diatur ke$true. Jika titik dua di akhir ada, argumen yang segera mengikuti harus menetapkan nilai dengan jenis bool, dan parameter yang sesuai diatur ke nilai tersebut. Misalnya, pemanggilan berikut setara:Set-MyProcess -Strict Set-MyProcess -Strict: $trueParameter dengan argumen (§8.10.2) -- Ini memiliki bentuk parameter perintah di mana first-parameter-char dan parameter-chars bersama-sama membentuk nama parameter, yang sesuai dengan nama parameter (tanpa tanda awal "-") dalam perintah yang dipanggil. Tidak boleh ada titik dua di akhir. Argumen yang langsung mengikuti menentukan nilai terkait. Misalnya, diberikan perintah
Get-Power, yang memiliki parameter$Basedan$Exponent, pemanggilan berikut setara:Get-Power -Base 5 -Exponent 3 Get-Power -Exponent 3 -Base 5Argumen posisi (§8.10.2) - Argumen dan parameter terkait di dalam perintah memiliki posisi dengan yang pertama memiliki posisi nol. Argumen dalam posisi 0 terikat ke parameter di posisi 0; argumen dalam posisi 1 terikat ke parameter di posisi 1; dan sebagainya. Misalnya, diberikan perintah
Get-Power, yang memiliki parameter$Basedan$Exponentdi posisi 0 dan 1, masing-masing, berikut memanggil perintah tersebut:Get-Power 5 3
Lihat §8.2 untuk detail parameter -- khusus dan --%.
Ketika perintah dipanggil, nama parameter dapat disingkat; setiap bagian terdepan yang berbeda dari nama lengkap dapat digunakan, asalkan tidak ambigu sehubungan dengan nama parameter lain yang diterima oleh perintah yang sama.
Untuk informasi tentang pengikatan parameter, lihat §8,14.
2.3.5 Literal
Sintaksis:
literal:
integer-literal
real-literal
string-literal
2.3.5.1 Literal numerik
Ada dua jenis literal numerik: bilangan bulat (§2.3.5.1.1) dan nyata (§2.3.5.1.2). Keduanya dapat memiliki akhiran pengali (§2.3.5.1.3).
2.3.5.1.1 Literal bilangan bulat
Sintaksis:
integer-literal:
decimal-integer-literal
hexadecimal-integer-literal
decimal-integer-literal:
decimal-digits numeric-type-suffix~opt~ numeric-multiplier~opt~
decimal-digits:
decimal-digit
decimal-digit decimal-digits
decimal-digit: one of
0 1 2 3 4 5 6 7 8 9
numeric-type-suffix:
long-type-suffix
decimal-type-suffix
hexadecimal-integer-literal:
0x hexadecimal-digits long-type-suffix~opt~
numeric-multiplier~opt~
hexadecimal-digits:
hexadecimal-digit
hexadecimal-digit hexadecimal-digits
hexadecimal-digit: one of
0 1 2 3 4 5 6 7 8 9 a b c d e f
long-type-suffix:
l
numeric-multiplier: one of
kb mb gb tb pb
Deskripsi:
Jenis literal bilangan bulat ditentukan oleh nilainya, ada atau tidak adanya akhiran tipe panjang, dan adanya pengali numerik (§2.3.5.1.3).
Untuk bilangan bulat literal tanpa akhiran tipe panjang
- Jika nilainya dapat diwakili oleh jenis int (§4.2.3), itu adalah jenisnya;
- Jika tidak, jika nilainya dapat diwakili oleh tipe long (§4.2.3), maka itu adalah tipenya.
- Jika tidak, jika nilainya dapat diwakili oleh jenis desimal (§2.3.5.1.2), itu adalah jenisnya.
- Jika tidak, itu diwakili oleh tipe double (§2.3.5.1.2).
Untuk bilangan bulat literal dengan akhiran tipe panjang
- Jika nilainya dapat diwakili oleh panjang jenis (§4.2.3), itu adalah jenisnya;
- Jika tidak, literal itu terbentuk dengan buruk.
Dalam representasi two's complement untuk nilai bilangan bulat, ada satu nilai negatif lebih banyak daripada nilai positif. Untuk jenis int, nilai tambahan tersebut adalah -2147483648. Untuk jenis panjang, nilai tambahan tersebut adalah -9223372036854775808. Meskipun token 2147483648 biasanya akan diperlakukan sebagai nilai literal tipe long, jika segera didahului oleh operator unary -, operator dan literal tersebut diperlakukan sebagai nilai literal tipe int yang memiliki nilai terkecil. Demikian pula, meskipun token 9223372036854775808 biasanya akan diperlakukan sebagai literal angka nyata dari tipe desimal, jika segera didahului oleh operator unari -, operator dan literal tersebut diperlakukan sebagai literal tipe long yang memiliki nilai terkecil.
Beberapa contoh literal bilangan bulat adalah 123 (int), 123L (panjang), dan 2000000000000 (panjang).
Tidak ada yang namanya bilangan bulat literal jenis byte.
2.3.5.1.2 Literal nyata
Sintaksis:
real-literal:
decimal-digits . decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
. decimal-digits exponent-part~opt~ decimal-type-suffix~opt~ numeric-multiplier~opt~
decimal-digits exponent-part decimal-type-suffix~opt~ numeric-multiplier~opt~
exponent-part:
e sign~opt~ decimal-digits
sign: one of
+
dash
decimal-type-suffix:
d
l
numeric-multiplier: one of
kb mb gb tb pb
dash:
- (U+002D)
EnDash character (U+2013)
EmDash character (U+2014)
Horizontal bar character (U+2015)
Deskripsi:
Sebuah literal real dapat mengandung pengali numerik (§2.3.5.1.3).
Ada dua jenis literal nyata: double dan desimal. Ini ditunjukkan oleh ketidakhadiran atau kehadiran, masing-masing, dari akhiran jenis desimal. (Tidak ada yang namanya float real literal.)
Literal nyata ganda memiliki jenis ganda (§4.2.4.1). Literal desimal riil memiliki tipe desimal (§4.2.4.2). Nol-nol yang mengikuti di bagian pecahan dari literal desimal nyata adalah signifikan.
Jika nilai bagian eksponen dari digit desimal dalam literal bilangan real ganda kurang dari minimum yang didukung, maka nilai dari literal bilangan real ganda tersebut adalah 0. Jika nilai bagian eksponendigit desimal dalam literal nyata desimal kurang dari minimum yang didukung, maka literal tersebut salah bentuknya. Jika nilai bagian eksponen berupa digit desimal dalam literal ganda atau desimal melebihi dukungan maksimum, maka literal tersebut tidak valid.
Beberapa contoh literal nyata ganda adalah 1., 1.23, .45e35, 32.e+12, dan 123.456E-231.
Beberapa contoh literal nyata desimal adalah 1d (yang memiliki skala 0), 1,20d (yang memiliki skala 2), 1,23450e1d (yaitu, 12,3450, yang memiliki skala 4), 1,2345e3d (yaitu, 1234.5, yang memiliki skala 1), 1,2345e-1d (yaitu, 0,12345, yang memiliki skala 5), dan 1,2345e-3d (yaitu, 0,0012345, yang memiliki skala 7).
Nota
Karena literal nyata ganda tidak perlu memiliki bagian pecahan atau eksponen, tanda kurung pengelompokan dalam (123). M diperlukan untuk memastikan bahwa properti atau metode M sedang dipilih untuk objek bilangan bulat yang nilainya adalah 123. Tanpa tanda kurung tersebut, literal yang sebenarnya tidak akan terbentuk dengan benar.
Nota
Meskipun PowerShell tidak menyediakan literal untuk infinitas dan NaN, ekuivalen seperti literal nyata ganda dapat diperoleh dari properti baca-saja statis PositiveInfinity, NegativeInfinity, dan NaN dari jenis float dan double (§4.2.4.1).
Tata bahasa memungkinkan apa yang dimulai sebagai literal angka ganda dapat memiliki akhiran jenis l atau L. Token seperti itu benar-benar bilangan bulat harfiah yang nilainya diwakili oleh jenis panjang.
Nota
Fitur ini telah dipertahankan untuk kompatibilitas mundur dengan versi PowerShell yang lebih lama. Namun, para programmer tidak dianjurkan untuk menggunakan literal bilangan bulat dalam bentuk ini karena bentuk ini dapat dengan mudah membuat nilai literal menjadi tidak jelas. Misalnya, 1,2L memiliki nilai 1, 1,2345e1L memiliki nilai 12, dan 1,2345e-5L memiliki nilai 0, tidak satu pun yang segera jelas.
2.3.5.1.3 Akhiran pengali
Sintaksis:
numeric-multiplier: *one of*
kb mb gb tb pb
Deskripsi:
Untuk kenyamanan, bilangan bulat dan real dapat berisi pengali numerik, yang menunjukkan salah satu dari sekumpulan pangkat 10 yang umum digunakan. pengali numerik dapat ditulis dalam kombinasi huruf besar atau kecil apa pun.
| Pengali | Arti | Contoh |
|---|---|---|
| Kb | kilobyte (1024) | 1kb ≡ 1024 |
| mb | megabyte (1024 x 1024) | 1,30Dmb ≡ 1.363.148,80 |
| Gb | gigabyte (1024 x 1024 x 1024) | ≡ 17179869184 0x10Gb |
| Tb | terabyte (1024 x 1024 x 1024 x 1024) | 1.4e23tb ≡ 1.5393162788864E+35 |
| Pb | petabyte (1024 x 1024 x 1024 x 1024 x 1024) | 0x12Lpb ≡ 20266198323167232 |
2.3.5.2 String literal
Sintaksis:
string-literal:
expandable-string-literal
expandable-here-string-literal
verbatim-string-literal
verbatim-here-string-literal
expandable-string-literal:
double-quote-character expandable-string-characters~opt~ dollars~opt~ double-quote-character
double-quote-character:
" (U+0022)
Left double quotation mark (U+201C)
Right double quotation mark (U+201D)
Double low-9 quotation mark (U+201E)
expandable-string-characters:
expandable-string-part
expandable-string-characters
expandable-string-part
expandable-string-part:
Any Unicode character except
$
double-quote-character
` (The backtick character U+0060)
braced-variable
$ Any Unicode character except
(
{
double-quote-character
` (The backtick character U+0060)*
$ escaped-character
escaped-character
double-quote-character double-quote-character
dollars:
$
dollars $
expandable-here-string-literal:
@ double-quote-character whitespace~opt~ new-line-character
expandable-here-string-characters~opt~ new-line-character double-quote-character @
expandable-here-string-characters:
expandable-here-string-part
expandable-here-string-characters expandable-here-string-part
expandable-here-string-part:
Any Unicode character except
$
new-line-character
braced-variable
$ Any Unicode character except
(
new-line-character
$ new-line-character Any Unicode character except double-quote-char
$ new-line-character double-quote-char Any Unicode character except @
new-line-character Any Unicode character except double-quote-char
new-line-character double-quote-char Any Unicode character except @
expandable-string-with-subexpr-start:
double-quote-character expandable-string-chars~opt~ $(
expandable-string-with-subexpr-end:
double-quote-char
expandable-here-string-with-subexpr-start:
@ double-quote-character whitespace~opt~ new-line-character expandable-here-string-chars~opt~ $(
expandable-here-string-with-subexpr-end:
new-line-character double-quote-character @
verbatim-string-literal:
single-quote-character verbatim-string-characters~opt~ single-quote-char
single-quote-character:
' (U+0027)
Left single quotation mark (U+2018)
Right single quotation mark (U+2019)
Single low-9 quotation mark (U+201A)
Single high-reversed-9 quotation mark (U+201B)
verbatim-string-characters:
verbatim-string-part
verbatim-string-characters verbatim-string-part
verbatim-string-part:
*Any Unicode character except* single-quote-character
single-quote-character single-quote-character
verbatim-here-string-literal:
@ single-quote-character whitespace~opt~ new-line-character
verbatim-here-string-characters~opt~ new-line-character
single-quote-character *@*
verbatim-*here-string-characters:
verbatim-here-string-part
verbatim-here-string-characters verbatim-here-string-part
verbatim-here-string-part:
Any Unicode character except* new-line-character
new-line-character Any Unicode character except single-quote-character
new-line-character single-quote-character Any Unicode character except @
Deskripsi:
Ada empat jenis literal string:
verbatim-string-literal (kutipan tunggal satu baris), adalah rangkaian karakter yang terdiri dari nol atau lebih karakter yang diapit oleh sepasang karakter tanda kutip tunggal. Contohnya adalah '' dan 'merah'.
expandable-string-literal (single-line double-quoted), yang merupakan urutan karakter nol atau lebih yang dibatasi oleh sepasang karakter tanda kutip ganda. Contohnya adalah "" dan "merah".
verbatim-here-string-literal (dikutip tunggal multibaris), yang merupakan urutan nol atau lebih karakter yang dibatasi oleh pasangan karakter @single-quote-character dan single-quote-character@, masing-masing, yang mencakup dua atau lebih baris sumber. Contohnya adalah:
@' '@ @' line 1 '@ @' line 1 line 2 '@expandable-here-string-literal (dikutip ganda multibaris), yang merupakan urutan nol atau lebih karakter yang dibatasi oleh pasangan karakter @karakter tanda kutip ganda dan karakter tanda kutip ganda@, semuanya terletak pada dua atau lebih baris sumber. Contohnya adalah:
@" "@ @" line 1 "@ @" line 1 line 2 "@
Untuk verbatim-here-string-literals dan expandable-here-string-literals, kecuali untuk spasi putih (yang diabaikan) tidak ada karakter yang dapat mengikuti pada baris sumber yang sama dengan pasangan karakter pembatas pembatas pembuka, dan tidak ada karakter yang dapat mendahului pada baris sumber yang sama dengan pasangan karakter pembatas penutup.
Isiverbatim-here-string-literal atau expandable-here-string-literal dimulai pada awal baris sumber pertama setelah pembatas pembuka, dan berakhir di akhir baris sumber terakhir sebelum pembatas penutup. Tubuh mungkin kosong. Terminator garis pada baris sumber terakhir sebelum pemisah penutup bukan bagian dari tubuh harfiah itu.
Literal dari salah satu jenis ini memiliki tipe string (§4.3.1).
Karakter yang digunakan untuk memisahkan verbatim-string-literal atau expandable-string-literal dapat dikandung dalam string harfiah seperti itu dengan menulis karakter itu dua kali, berturut-turut. Misalnya, 'What''s the time?' dan "I said, ""Hello"".". Namun, karakter kutipan tunggal tidak memiliki arti khusus di dalam string-literal yang dapat diperluas, dan karakter kutipan ganda tidak memiliki arti khusus di dalam verbatim-string-literal.
String-literal yang dapat diperluas dan string-literal di sini yang dapat diperluas mungkin berisi karakter yang di-escape (§2.3.7). Misalnya, ketika string literal berikut ditulis ke alur, hasilnya seperti yang ditunjukkan di bawah ini:
"column1`tcolumn2`nsecond line, `"Hello`", ```Q`5`!"
column1<horizontal-tab>column2<new-line>
second line, "Hello", `Q5!
Jika expandable-string-literal atau expandable-here-string-literal berisi nama variabel, kecuali nama tersebut segera didahului oleh karakter escape, itu digantikan oleh representasi string dari nilai variabel tersebut (§6,7). Ini dikenal sebagai substitusi variabel.
Nota
Jika nama variabel adalah bagian dari beberapa ekspresi yang lebih besar, hanya nama variabel yang diganti. Misalnya, jika $a adalah array yang berisi elemen 100 dan 200, ">$a.Length<" menghasilkan >100 200.Length< saat ">$($a.Length)<" menghasilkan >2<. Lihat ekspansi sub-ekspresi di bawah ini.
Misalnya, kode sumber
$count = 10
"The value of `$count is $count"
menghasilkan literal-string-dapat-diekspansi
The value of $count is 10.
Pertimbangkan hal berikut:
$a = "red","blue"
"`$a[0] is $a[0], `$a[0] is $($a[0])" # second [0] is taken literally
Hasilnya adalah
$a[0] is red blue[0], $a[0] is red
expandable-string-literals dan expandable-here-string-literals juga mendukung semacam substitusi yang disebut ekspansi sub-ekspresi, dengan memperlakukan teks formulir $( ... ) sebagai sub-ekspresi (§7.1.6). Teks tersebut digantikan oleh representasi string dari nilai ekspresi tersebut (§6,8). Setiap spasi kosong yang digunakan untuk memisahkan token dalam sub-ekspresidaftar pernyataan diabaikan terkait dengan konstruksi string hasil.
Contohnya,
$count = 10
"$count + 5 is $($count + 5)"
"$count + 5 is `$($count + 5)"
"$count + 5 is `$(`$count + 5)"
menghasilkan string-literal yang dapat diperluas berikut:
10 + 5 is 15
10 + 5 is $(10 + 5)
10 + 5 is $($count + 5)
Sumber berikut,
$i = 5; $j = 10; $k = 15
"`$i, `$j, and `$k have the values $( $i; $j; $k )"
menghasilkan string literal yang dapat diperluas berikut:
$i, $j, and $k have the values 5 10 15
Empat baris ini bisa saja ditulis dengan lebih jelas sebagai berikut:
"`$i, `$j, and `$k have the values $(($i = 5); ($j = 10); ($k = 15))"
Dalam contoh berikut,
"First 10 squares: $(for ($i = 1; $i -le 10; ++$i) { "$i $($i*$i) " })"
yang dihasilkan expandable-string-literal adalah sebagai berikut:
First 10 squares: 1 1 2 4 3 9 4 16 5 25 6 36 7 49 8 64 9 81 10 100
Seperti yang ditunjukkan, sub-ekspresi dapat berisi literal string yang memiliki substitusi variabel dan ekspansi sub-ekspresi. Perhatikan juga bahwa pembatas inner expandable-string-literal tidak perlu diloloskan; fakta bahwa mereka berada di dalam sub-ekspresi berarti mereka tidak dapat menjadi terminator untuk outer expandable-string-literal.
String literal yang dapat diperluas atau here-string literal yang dapat diperluas yang berisi substitusi variabel atau ekspansi sub-ekspresi dievaluasi setiap kali literal digunakan; misalnya
$a = 10
$s1 = "`$a = $($a; ++$a)"
"`$s1 = >$s1<"
$s2 = "`$a = $($a; ++$a)"
"`$s2 = >$s2<"
$s2 = $s1
"`$s2 = >$s2<"
yang menghasilkan string-literal yang dapat diperluas berikut:
$s1 = >$a = 10<
$s2 = >$a = 11<
$s2 = >$a = 10<
Isi verbatim-here-string-literal diambil verbatim, termasuk ruang putih terkemuka atau berikutnya dalam tubuh. Dengan demikian, karakter tanda kutip tunggalyang disematkan tidak perlu dilipatgandakan, dan tidak ada substitusi atau ekspansi. Contohnya,
$lit = @'
That's it!
2 * 3 = $(2*3)
'@
yang menghasilkan arti harfiah
That's it!
2 * 3 = $(2*3)
Isi dari string-literal yang dapat diperluas-di sini tunduk pada substitusi dan ekspansi, tetapi setiap spasi putih terkemuka atau berikutnya dalam isi tetapi di luar sub-ekspresidiambil verbatim, dan karakter kutipan gandayang disematkan tidak perlu digandakan. Contohnya,
$lit = @"
That's it!
2 * 3 = $(2*3)
"@
yang menghasilkan hasil literal berikut ketika diperluas:
That's it!
2 * 3 = 6
Untuk verbatim-here-string-literals dan expandable-here-string-literals, setiap terminator baris dalam isi diwakili dalam literal yang dihasilkan dengan cara yang ditentukan oleh implementasi. Misalnya, di
$lit = @"
abc
xyz
"@
baris kedua tubuh memiliki dua ruang terdepan, dan baris pertama dan kedua tubuh memiliki terminator garis; namun, terminator untuk baris kedua tubuh bukan bagian dari tubuh itu. Literal yang dihasilkan setara dengan: "abc<implementation-defined character sequence>xyz".
Nota
Untuk membantu keterbacaan sumber, literal string panjang dapat dipecah di beberapa baris sumber tanpa terminator garis dimasukkan. Ini dilakukan dengan menulis setiap bagian sebagai literal terpisah dan menggabungkan bagian-bagian dengan operator + (§7.7.2). Operator ini memungkinkan operannya untuk menunjuk salah satu dari empat jenis string literal.
Nota
Meskipun tidak ada yang namanya karakter harfiah per se, efek yang sama dapat dicapai dengan mengakses karakter pertama dalam string 1 karakter, sebagai berikut: [char]"A" atau "A"[0].
Untuk verbatim-here-string-literal dan expandable-here-string-literal, setiap pemisah baris dalam isinya diwakili persis seperti yang diberikan.
2.3.5.3 Literal null
Lihat variabel $null otomatis (§2.3.2.2).
2.3.5.4 Literal Boolean
Lihat variabel $false otomatis dan $true (§2.3.2.2).
2.3.5.5 Literal Array
PowerShell memungkinkan ekspresi jenis array (§9) ditulis menggunakan operator koma unary (§7.2.1), array-expression (§7.1.7), operator koma biner (§7,3), dan operator rentang (§7,4).
2.3.5.6 Literal hash
PowerShell memungkinkan ekspresi jenis Hashtable (§10) ditulis menggunakan hash-literal-expression (§7.1.9)
2.3.5.7 Nama jenis
Sintaksis:
type-name:
type-identifier
type-name . type-identifier
type-identifier:
type-characters
type-characters:
type-character
type-characters type-character
type-character:
A Unicode character of classes Lu, Ll, Lt, Lm, Lo, or Nd
_ (The underscore character U+005F)
array-type-name:
type-name [
generic-type-name:
type-name [
2.3.6 Operator dan tanda baca
Sintaksis:
operator-or-punctuator: one of
{ } [ ] ( ) @( @{ $( ;
&& || & | , ++ .. :: .
! * / % + - --
-and -band -bnot -bor
-bxor -not -or -xor
assignment-operator
merging-redirection-operator
file-redirection-operator
comparison-operator
format-operator
assignment-operator: one of
= -= += *= /= %=
file-redirection-operator: one of
> >> 2> 2>> 3> 3>> 4> 4>>
5> 5>> 6> 6>> *> *>> <
merging-redirection-operator: one of
*>&1 2>&1 3>&1 4>&1 5>&1 6>&1
*>&2 1>&2 3>&2 4>&2 5>&2 6>&2
comparison-operator: *one of
-as -ccontains -ceq
-cge -cgt -cle
-clike -clt -cmatch
-cne -cnotcontains -cnotlike
-cnotmatch -contains -creplace
-csplit -eq -ge
-gt -icontains -ieq
-ige -igt -ile
-ilike -ilt -imatch
-in -ine -inotcontains
-inotlike -inotmatch -ireplace
-is -isnot -isplit
-join -le -like
-lt -match -ne
-notcontains -notin -notlike
-notmatch -replace -shl*
-shr -split
format-operator:
-f
Deskripsi:
&& dan || dicadangkan untuk digunakan di masa mendatang.
Nota
Catatan Editor: Operator && rantai alur dan || diperkenalkan di PowerShell 7. Lihat about_Pipeline_Chain_Operators.
Nama berikut tanda hubung dalam operator dicadangkan untuk tujuan tersebut hanya dalam konteks operator.
Operator yang dimulai dengan tanda hubung tidak boleh memiliki spasi kosong antara tanda hubung tersebut dan token yang mengikutinya.
2.3.7 Karakter yang lolos
Sintaksis:
escaped-character:
` (The backtick character U+0060) followed by any Unicode character
Deskripsi:
Karakter escape adalah cara untuk menetapkan interpretasi khusus ke karakter dengan memberinya awalan karakter Backtick (U+0060). Tabel berikut ini memperlihatkan arti setiap karakter yang diloloskan:
| Karakter yang Lolos | Makna |
|---|---|
`a |
Pemberitahuan (U+0007) |
`b |
Backspace (U+0008) |
`f |
Umpan formulir (U+000C) |
`n |
Garis baru (U+000A) |
`r |
Pengembalian pengangkutan (U+000D) |
`t |
Tab Horizontal (U+0009) |
`v |
Tab vertikal (U+0009) |
`' |
Kutipan tunggal (U+0027) |
`" |
Kutipan ganda (U+0022) |
`` |
Backtick (U+0060) |
`0 |
NUL (U+0000) |
`x |
Jika x adalah karakter selain karakter yang ditunjukkan di atas, karakter backtick diabaikan dan x diambil secara harfiah. |
Implikasi dari entri akhir dalam tabel di atas adalah bahwa spasi yang sebaliknya akan memisahkan token dapat dijadikan bagian dari token sebagai gantinya. Misalnya, nama file yang berisi spasi dapat ditulis sebagai Test` Data.txt (serta 'Test Data.txt' atau "Test Data.txt").