让我们假设这是字符串:
'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 限制。如果您的文件总是很小,您不必担心,但否则您应该尝试另一种方法将数据放入脚本中。