假设我有一个 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
中的适当字符?
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\""