我需要写一个Ruby函数,它在给定变量名和应该赋值的值的情况下生成一个正确的Bash导出语句。我目前的尝试是
def export(variable, string)
"export #{variable}=#{Shellwords.escape(string)}"
end
然而,它的表现并不像我期望的那样。例如
[2] pry(main)> export("X", "a\nb")
"export X=a'\n'b"
然后
export X=a'\n'b
echo "$X"
在 shell 中给出
a\nb
而不是期望的
a
b
如果有关系的话(我不希望有关系,但以防万一),语句将被写入一个文件,稍后将被引用。
1条答案
按热度按时间ltqd579y1#
您复制粘贴的是
irb
中自动回显的字符串,而不是该字符串的 value。自动回显显示了一个Ruby字符串文字,其中保留了Ruby转义符,所以你得到:如果你打印了这个字符串(例如使用
puts
)来获取其原始值(转义符被打印为它们的真实的字符),例如然后复制粘贴成:
它会工作得很好。
类似地,将
"export X=#{Shellwords.escape(string)}"
写入文件(通过puts
或其他实际的I/O API写入字符串的值,而不是其表示)以供以后使用也可以正常工作,因为这将插入字符串的值,并且文件将以单引号之间的原始换行符结束,而不是\n
。