docs: update quoting rules for PowerShell 7.3+ (#3649)
The manual recommended backslash-escaped double quotes inside the jq program for all PowerShell versions, but since PowerShell 7.3 native command arguments are passed with standard quoting by default, so the backslashes reach jq literally. Describe the quoting rules separately for Unix shells and PowerShell 7.3+, for older PowerShell and Windows PowerShell, and for cmd.exe, and update the examples to match.
This commit is contained in:
1 parent
ec0e2f3f94
commit
175b8e3c51
2 files changed
+23
-20
No files matched your search
@@ -85,24 +85,24 @@ sections:
|
|||||||
language is quite rich and allows for much more than just
|
language is quite rich and allows for much more than just
|
||||||
validation and pretty-printing.
|
validation and pretty-printing.
|
||||||
|
|
||||||
Note: it is important to mind the shell's quoting rules. As a
|
Note: It is important to mind the shell's quoting rules. As a general
|
||||||
general rule it's best to always quote (with single-quote
|
rule, it's best to always quote the jq program, as many characters with
|
||||||
characters on Unix shells) the jq program, as too many characters with special
|
special meaning to jq are also shell meta-characters. For example, `jq
|
||||||
meaning to jq are also shell meta-characters. For example, `jq
|
"foo"` will fail on most shells, as it's equivalent to `jq foo` which will
|
||||||
"foo"` will fail on most Unix shells because that will be the same
|
generally fail because `foo is not defined`.
|
||||||
as `jq foo`, which will generally fail because `foo is not
|
|
||||||
defined`. When using the Windows command shell (cmd.exe) it's
|
Inside a Unix shell or PowerShell 7.3+, use single quotes around the jq
|
||||||
best to use double quotes around your jq program when given on the
|
program and double quotes inside the jq program.
|
||||||
command-line (instead of the `-f program-file` option), but then
|
When using PowerShell before 7.3 or Windows PowerShell (`powershell.exe`),
|
||||||
double-quotes in the jq program need backslash escaping. When using
|
use single quotes around the jq program and backslash-escaped double
|
||||||
the Powershell (`powershell.exe`) or the Powershell Core
|
quotes (`\"`) inside the jq program.
|
||||||
(`pwsh`/`pwsh.exe`), use single-quote characters around the jq
|
When using the Windows command interpreter (cmd.exe), use double quotes
|
||||||
program and backslash-escaped double-quotes (`\"`) inside the jq
|
around your jq program, and backslash-escaped double quotes inside the jq
|
||||||
program.
|
program.
|
||||||
|
|
||||||
* Unix shells: `jq '.["foo"]'`
|
* Unix shells, PowerShell 7.3+: `jq '.["foo"]'`
|
||||||
* Powershell: `jq '.[\"foo\"]'`
|
* PowerShell 7.2 and older, Windows PowerShell: `jq '.[\"foo\"]'`
|
||||||
* Windows command shell: `jq ".[\"foo\"]"`
|
* Windows command interpreter: `jq ".[\"foo\"]"`
|
||||||
|
|
||||||
Note: jq allows user-defined functions, but every jq program
|
Note: jq allows user-defined functions, but every jq program
|
||||||
must have a top-level expression.
|
must have a top-level expression.
|
||||||
|
|||||||
Generated
+7
-4
@@ -38,16 +38,19 @@ jq filters run on a stream of JSON data\. The input to jq is parsed as a sequenc
|
|||||||
The simplest and most common filter (or jq program) is \fB\.\fR, which is the identity operator, copying the inputs of the jq processor to the output stream\. Because the default behavior of the jq processor is to read JSON texts from the input stream, and to pretty\-print outputs, the \fB\.\fR program\'s main use is to validate and pretty\-print the inputs\. The jq programming language is quite rich and allows for much more than just validation and pretty\-printing\.
|
The simplest and most common filter (or jq program) is \fB\.\fR, which is the identity operator, copying the inputs of the jq processor to the output stream\. Because the default behavior of the jq processor is to read JSON texts from the input stream, and to pretty\-print outputs, the \fB\.\fR program\'s main use is to validate and pretty\-print the inputs\. The jq programming language is quite rich and allows for much more than just validation and pretty\-printing\.
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
Note: it is important to mind the shell\'s quoting rules\. As a general rule it\'s best to always quote (with single\-quote characters on Unix shells) the jq program, as too many characters with special meaning to jq are also shell meta\-characters\. For example, \fBjq "foo"\fR will fail on most Unix shells because that will be the same as \fBjq foo\fR, which will generally fail because \fBfoo is not defined\fR\. When using the Windows command shell (cmd\.exe) it\'s best to use double quotes around your jq program when given on the command\-line (instead of the \fB\-f program\-file\fR option), but then double\-quotes in the jq program need backslash escaping\. When using the Powershell (\fBpowershell\.exe\fR) or the Powershell Core (\fBpwsh\fR/\fBpwsh\.exe\fR), use single\-quote characters around the jq program and backslash\-escaped double\-quotes (\fB\e"\fR) inside the jq program\.
|
Note: It is important to mind the shell\'s quoting rules\. As a general rule, it\'s best to always quote the jq program, as many characters with special meaning to jq are also shell meta\-characters\. For example, \fBjq "foo"\fR will fail on most shells, as it\'s equivalent to \fBjq foo\fR which will generally fail because \fBfoo is not defined\fR\.
|
||||||
|
.
|
||||||
|
.P
|
||||||
|
Inside a Unix shell or PowerShell 7\.3+, use single quotes around the jq program and double quotes inside the jq program\. When using PowerShell before 7\.3 or Windows PowerShell (\fBpowershell\.exe\fR), use single quotes around the jq program and backslash\-escaped double quotes (\fB\e"\fR) inside the jq program\. When using the Windows command interpreter (cmd\.exe), use double quotes around your jq program, and backslash\-escaped double quotes inside the jq program\.
|
||||||
.
|
.
|
||||||
.IP "\(bu" 4
|
.IP "\(bu" 4
|
||||||
Unix shells: \fBjq \'\.["foo"]\'\fR
|
Unix shells, PowerShell 7\.3+: \fBjq \'\.["foo"]\'\fR
|
||||||
.
|
.
|
||||||
.IP "\(bu" 4
|
.IP "\(bu" 4
|
||||||
Powershell: \fBjq \'\.[\e"foo\e"]\'\fR
|
PowerShell 7\.2 and older, Windows PowerShell: \fBjq \'\.[\e"foo\e"]\'\fR
|
||||||
.
|
.
|
||||||
.IP "\(bu" 4
|
.IP "\(bu" 4
|
||||||
Windows command shell: \fBjq "\.[\e"foo\e"]"\fR
|
Windows command interpreter: \fBjq "\.[\e"foo\e"]"\fR
|
||||||
.
|
.
|
||||||
.IP "" 0
|
.IP "" 0
|
||||||
.
|
.
|
||||||
|
|||||||
Reference in new issue
Block a user