Bash:一种将变量内容传递给 `bash -c` 的技术

问题描述 投票:0回答:1

假设我有一个 bash 变量

ext
。我想做(类似)
bash -c "internal=$ext"
,其中
internal
ext

具有完全相同的内容
    如果
  • bash -c "internal=$ext"
     内部有空格,
    ext
    将不起作用。此外,代码注入也是可能的。
    ext="a b"
    将尝试执行
    b
  • 如果
  • bash -c "internal='$ext'"
     有(单)引号,
    ext
    也将不起作用。例如,
    ext="'"
    将会失败
  • 如果
  • bash -c "internal=\"$ext\""
     有(双)引号,
    ext
    也将不起作用。例如,
    ext='"'
    将会失败

我理想地希望有一种技术能够处理所有可能的字符串,并且

internal
ext
的内容完全相等。

一种可能的解决方案是“带外”解决方案,您可以使用环境/某些文件来存储 ext 并从那里读取。例如,

export ext ; bash -c "internal=\"\$ext\'"
可能有效...
我不想使用这种技术。这是因为它可能适用于 

bash -c

,但对于

ssh
等会失败。
如何解决这个问题?是否有一些现有的函数/命令可以自动转义

ext

中的适当字符?

    

bash escaping sh
1个回答
0
投票
printf %q

这是如何工作的:

ext=$(cat << "EOF" This is a wonky string t"'x?/?''$( # This is a comment > > EOF ) escaped_ext=$(printf %q "$ext") bash -c "int=$escaped_ext ; echo \"\$int\""

© www.soinside.com 2019 - 2024. All rights reserved.