将变量的全部内容传递给函数

Posted

技术标签:

【中文标题】将变量的全部内容传递给函数【英文标题】:Pass the entire content of the variable into a function 【发布时间】:2022-01-09 06:07:39 【问题描述】:

我需要将变量的内容原样转换为base64。我决定制作一个函数并将变量的内容传递给它,稍后再输出。到目前为止,我有以下内容

#!/bin/dash

payload1='
  "currency": "ABC",
  "transaction": "1-8ef2b11f1b"

'

payload2='x'

function base64_encode() 
# must first receive the data
# ...
  printf '%s' "$input" | base64 | tr -d '=' | tr '/+' '_-' | tr -d '\n'


# something like:
printf '%s' "$(printf '%s' "$payload1" | base64_encode)"
printf '%s' "$(printf '%s' "$payload2" | base64_encode)"

最重要的是,我应该从payload1 变量中准确获取ewogICJjdXJyZW5jeSI6ICJBQkMiLAogICJ0cmFuc2FjdGlvbiI6ICIxLThlZjJiMTFmMWIiCn0K,而不是ewogICJjdXJyZW5jeSI6ICJBQkMiLAogICJ0cmFuc2FjdGlvbiI6ICIxLThlZjJiMTFmMWIiCn0。问题是我不知道如何将变量的内容放入base64_encode函数中。

有没有通用的方法来做到这一点?或者我的方法通常是错误的?

【问题讨论】:

function funcname() 不符合 POSIX,我很惊讶 dash 已经开始接受它。声明函数的 POSIX 标准方法是 funcname() ,前面没有 function。见wiki.bash-hackers.org/scripting/obsolete 顺便说一句,你真的需要 sh/dash 兼容性吗?使此代码符合 POSIX 标准的简单方法倾向于丢弃尾随换行符(使用 input=$(cat) 或任何其他命令替换从标准输入读取变量会丢弃它们) ...关于不同的主题——如果你描述了某人如何说服自己带有尾随 K 的输出是正确的,而不是在没有解释的情况下断言它是正确的,那将会很有帮助。 不要删除结尾的 = 符号,它们很重要:en.wikipedia.org/wiki/Base64#Output_padding 另外,那些tr 命令将使编码的字符串不可解码:下划线和减号不是合法的base64字符:en.wikipedia.org/wiki/Base64#Base64_table 【参考方案1】:

由于您要将数据通过管道传输到函数中,因此让 base64 直接从标准输入读取:

base64_encode() 
  base64    # removed questionable `tr` commands

【讨论】:

tr -d '\n' 是必要的,因为 GNU base64 每 76 个字符添加换行符。另一个tr 用于将base64 转换为base64 URL ...GNU base64 只这样做,除非它被告知不要这样做,它非常可能。 base64 -w 0 你来了。 是的,但是其他操作系统上的base64 不添加这些换行符(至少是 BSD 和 Solaris),所以 portable 解决方案是 tr -d '\n'

以上是关于将变量的全部内容传递给函数的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个 PHP 变量传递给 jQuery 函数?

将带引号的变量传递给React中的函数

如何将变量传递给评估函数?

将类型变量传递给函数

如何将两个变量传递给 python 函数并返回两个变量? [复制]

将变量传递给函数\使用该变量返回一个新值\重复直到值达到 0