为什么相同的 jsonpath 查询返回不同的输出?
Why is the same jsonpath query returning a different output?
我正在尝试使用以下 jq 查询提取 podname。
❯ kubectl get pods -l app=mssql-primary --output jsonpath='{.items[0].metadata.name}'
mssqlag-primary-deployment-77b8974bb9-dbltl%
❯ kubectl get pods -l app=mssql-primary -o json | jq -r '.items[0].metadata.name'
mssqlag-primary-deployment-77b8974bb9-dbltl
虽然它们都提供相同的输出,但第一个在 pod 名称末尾有一个 % 字符。有什么理由吗?第一个命令中的 jsonpath 表示有问题吗?
我猜 zsh
是你的 shell。 %
是您的 shell 输出的指示符,表示 kubectl
输出的最后一行末尾没有换行符。所以它不是 extra 输出,它实际上是原始 kubectl
命令输出 less 比 jq
.
如果需要,您可以明确地向 jsonpath 输出添加换行符:
kubectl get pods -l app=mssql-primary --output jsonpath='{.items[0].metadata.name}{"\n"}'
或者在另一个方向上,您可以通过指定 -j
而不是 -r
:
来告诉 jq
根本不要添加换行符
kubectl get pods -l app=mssql-primary -o json | jq -j '.items[0].metadata.name'
我用相同的部署名称和标签复制了您的案例。我从你的两个命令中得到相同的输出:
mssqlag-primary-deployment-77b8974bb9-dbltl
但是 kubectl ... --output jsonpath
不在终端中打印新行,而 kubectl -o json | jq -r
打印新行。
因此,如果您将命令的输出分配给一个变量,将会有相同的字符串。
OUTPUT1=$(kubectl get pods -l app=mssql-primary --output jsonpath='{.items[0].metadata.name}')
OUTPUT2=$(kubectl get pods -l app=mssql-primary -o json | jq -r '.items[0].metadata.name')
$OUTPUT1 等于 $OUTPUT2。
你得到 % 只是因为你 shell/terminal 的具体情况。
我正在尝试使用以下 jq 查询提取 podname。
❯ kubectl get pods -l app=mssql-primary --output jsonpath='{.items[0].metadata.name}'
mssqlag-primary-deployment-77b8974bb9-dbltl%
❯ kubectl get pods -l app=mssql-primary -o json | jq -r '.items[0].metadata.name'
mssqlag-primary-deployment-77b8974bb9-dbltl
虽然它们都提供相同的输出,但第一个在 pod 名称末尾有一个 % 字符。有什么理由吗?第一个命令中的 jsonpath 表示有问题吗?
我猜 zsh
是你的 shell。 %
是您的 shell 输出的指示符,表示 kubectl
输出的最后一行末尾没有换行符。所以它不是 extra 输出,它实际上是原始 kubectl
命令输出 less 比 jq
.
如果需要,您可以明确地向 jsonpath 输出添加换行符:
kubectl get pods -l app=mssql-primary --output jsonpath='{.items[0].metadata.name}{"\n"}'
或者在另一个方向上,您可以通过指定 -j
而不是 -r
:
jq
根本不要添加换行符
kubectl get pods -l app=mssql-primary -o json | jq -j '.items[0].metadata.name'
我用相同的部署名称和标签复制了您的案例。我从你的两个命令中得到相同的输出:
mssqlag-primary-deployment-77b8974bb9-dbltl
但是 kubectl ... --output jsonpath
不在终端中打印新行,而 kubectl -o json | jq -r
打印新行。
因此,如果您将命令的输出分配给一个变量,将会有相同的字符串。
OUTPUT1=$(kubectl get pods -l app=mssql-primary --output jsonpath='{.items[0].metadata.name}')
OUTPUT2=$(kubectl get pods -l app=mssql-primary -o json | jq -r '.items[0].metadata.name')
$OUTPUT1 等于 $OUTPUT2。
你得到 % 只是因为你 shell/terminal 的具体情况。