Bash:Shell 带有 `read` 命令和包含在 <<-EOF 中的 def(s) 的脚本
Bash: Shell script with `read` command and def(s) wrapped within <<-EOF
我有一个关于如何提供包含在 '"..."'
中的变量的问题,shell 脚本使用 read -d '' var <<- EOF
.
概述
我希望使用此 jq
实用程序库:jq-hopkok. Specifically, bash shell script to-components.sh,它使用 jq
将 URL 解析为其组件。
这个脚本很棒,除了我不清楚如何通过向它传递一个变量来使用这个脚本 $URL
。看来我只能使用静态 URL 字符串传递此脚本,该字符串必须包含在 双引号 中,然后再次包含在 单引号[=65 中=],例如'"..."'
.
使用静态 URL 值调用 to-components.sh 的示例 '"https://..."'
来自README.md:
#!/usr/bin/env bash
# URL to components
echo '"https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment"' | ./to-components.sh
示例部分结果
{
"value": "https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment",
"valid": true,
"scheme": {
"value": "https",
"valid": true
},
正在读取 to-components.sh
中的 URL 字符串
shell 脚本 to-components.sh 读取这个 特殊引号 URL 字符串 ,它必须被包装 '"..."'
或者它将无法解析成组件:
#!/usr/bin/env bash
set -e
# Split up a URL string to an object with the URL components.
read -d '' toComponents <<-'EOF' || true
...
EOF
cat | jq "$toComponents"
预期目标
我想用带变量的 URL 字符串调用此 shell 脚本,例如,我不确定如何构造变量 ???${URL}???
以便可以被 shell 脚本解析:
#!/usr/bin/env bash
URL="https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment"
# URL to components
echo ???${URL}??? | ./jq-hopkok/src/url/to-components.sh
我尝试了很多方法,但 none 行得通。所有导致错误:
parse error: Invalid numeric literal ...
谢谢
非常感谢任何建议!
您需要在 $URL
前后回显文字双引号。清楚地写这个的一种方法是创建一个包含双引号的变量。
URL="https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment"
dq='"'
echo "$dq$URL$dq" | ./jq-hopkok/src/url/to-components.sh
我有一个关于如何提供包含在 '"..."'
中的变量的问题,shell 脚本使用 read -d '' var <<- EOF
.
概述
我希望使用此 jq
实用程序库:jq-hopkok. Specifically, bash shell script to-components.sh,它使用 jq
将 URL 解析为其组件。
这个脚本很棒,除了我不清楚如何通过向它传递一个变量来使用这个脚本 $URL
。看来我只能使用静态 URL 字符串传递此脚本,该字符串必须包含在 双引号 中,然后再次包含在 单引号[=65 中=],例如'"..."'
.
使用静态 URL 值调用 to-components.sh 的示例 '"https://..."'
来自README.md:
#!/usr/bin/env bash
# URL to components
echo '"https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment"' | ./to-components.sh
示例部分结果
{
"value": "https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment",
"valid": true,
"scheme": {
"value": "https",
"valid": true
},
正在读取 to-components.sh
中的 URL 字符串shell 脚本 to-components.sh 读取这个 特殊引号 URL 字符串 ,它必须被包装 '"..."'
或者它将无法解析成组件:
#!/usr/bin/env bash
set -e
# Split up a URL string to an object with the URL components.
read -d '' toComponents <<-'EOF' || true
...
EOF
cat | jq "$toComponents"
预期目标
我想用带变量的 URL 字符串调用此 shell 脚本,例如,我不确定如何构造变量 ???${URL}???
以便可以被 shell 脚本解析:
#!/usr/bin/env bash
URL="https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment"
# URL to components
echo ???${URL}??? | ./jq-hopkok/src/url/to-components.sh
我尝试了很多方法,但 none 行得通。所有导致错误:
parse error: Invalid numeric literal ...
谢谢
非常感谢任何建议!
您需要在 $URL
前后回显文字双引号。清楚地写这个的一种方法是创建一个包含双引号的变量。
URL="https://server.example.com/deep/path/file.ext?with-a-parameter=true#and-a-fragment"
dq='"'
echo "$dq$URL$dq" | ./jq-hopkok/src/url/to-components.sh