Bash 脚本:将变量传递给包含引号、单引号的 bash 脚本。等等

Bash 脚本:将变量传递给包含引号、单引号的 bash 脚本。等等

让我们假设这是字符串:

   'a',"b"

它包含单引号和双引号。

如何将其作为单个字符串传递给 bash 脚本?

这是 bash 脚本:

#!/bin/bash
echo $1

它必须回响

'a',"b"

但我们不能假设字符串这么小。最终我计划发送整个

 /etc/httpd/conf/httpd.conf

作为此 bash 脚本的字符串。

所以我无法真正一次转义引号和单引号。

答案1

您可以使用命令替换:

oo.sh "$(cat /etc/httpd/conf/httpd.conf)"

这将运行cat /etc/httpd/conf/httpd.conf并将输出(文件的内容)放入给定的第一个参数中oo.sh。它被引用,因此它作为单个参数传递 - 空格和特殊字符不受影响地传递。oo.sh得到一个参数。


但更广泛地说,如果可能的话,最好将文件名传递到脚本中,或者将文件内容作为标准输入 ( oo.sh < /etc/httpd/conf/httpd.conf)。除了更加标准之外,所有命令行参数加在一起还有一个最大长度,并且文件可能比这个长度长。即使它现在可以工作,如果该文件随着时间的推移可能会变得更大,最终将整个文件作为参数传递将停止工作,并出现错误“arg list too long”。

您可以使用 找到该限制getconf ARG_MAX。大小差异很大:我的系统有 2MB 限制和 256KB 限制。如果您的文件总是很小,您不必担心,但否则您应该尝试另一种方法将数据放入脚本中。

相关内容