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