如何用外部变量将巨大的单行字符串包装到文档文件中



我的意思是类似于这个

<{ any text; "with double quotes"; some $VARIABLE here; and 'single quotes'; and semicolons; } >| doc.txt

我们有几个引号类型和许多嵌套变量需要解决。

我们不想逃避符号。

有了这里的文件,你必须有两行。

使用here字符串,必须转义所有嵌套的引号。

有什么合乎逻辑的解决方案吗?

如果当前执行的脚本是一个实际存在的文件,则可以获取当前行并从中提取要保留的文本,而文本可以存储为特殊分隔符后的注释。使用envsubst,可以替换导出变量的变量展开式。大致情况:

sed -n "${BASH_LINENO}s/.*### //p" "$0" | VARIABLE="$VARIABLE" envsubst '$VARIABLE' > doc.txt  ### any text; "with double quotes"; some $VARIABLE here; and 'single quotes'; and semicolons;

您也可以以同样的方式创建一个eval,它将在eval生成的单行文档中使用该行内容:

eval "cat <<EOF$(echo)$(sed -n "${BASH_LINENO}s/.*### //p" "$0")$(echo EOF)" > doc.txt   ### any text; "with double quotes"; some $VARIABLE here; and 'single quotes'; and semicolons;

使用base64 -w0(或许多其他编码),您可以将任何脚本(也是多行)编码为一行。从下面删除echo以实际执行脚本。

echo eval "$(base64 -d <<<Y2F0IDw8RU9GCmFueSB0ZXh0OyAid2l0aCBkb3VibGUgcXVvdGVzIjsgc29tZSAkVkFSSUFCTEUgaGVyZTsgYW5kICdzaW5nbGUgcXVvdGVzJzsgYW5kIHNlbWljb2xvbnM7CkVPRgo=)" > doc.txt

相关内容

  • 没有找到相关文章

最新更新