除了 Lua 之外,还有哪些语言支持无限多种字符串分隔符?

What languages other than Lua support an infinite variety of string delimiters?

my_lua_string = [=[ This is a string delimited with long brackets; it contains other valid long brackets like [[this]] (or this: ]==]), but they are ignored because Lua looks for a long bracket that matches the opening delimiter. ]=]

Lua 支持我在任何其他语言中都没有见过的东西:所谓的 'long brackets',有时也称为 'long strings' 或 'double brackets'。有无数种有效的长括号对:[[my multiline string]][=[...]=][==[...]==] 等等。您可以将它们用于多行注释,例如:--[[...]]--[=[...]=] 等。这意味着可以创建任何字符串文字,或者可以注释任何代码,而无需转义内容:您只需选择一个带有多个等号的长括号,这样结束定界符就不会出现在字符串中。

是否有任何其他语言具有可无限扩展的字符串定界符?我知道 Perl 的 q 样式,但 AFAIK 仅限于单个字符:q#...#qx...x,等等。我对像 Lua 那样超越单字符定界符的解决方案特别感兴趣。

(出于好奇:当我尝试使用 ssh 'multiple; commands' ssh 多个命令时出现了这个问题,其中一个命令是对 sudo sh -c '...' 的调用。我认为 shell是我经常手动创建具有多个引用级别的字符串文字的唯一环境。)


想要了解Lua的长括号的朋友:

一个有效的 Lua 评论,以及一个有效的 Lua 字符串:

--[[ This comments out an assignment to my_lua_string
my_lua_string = [==[one [=[inner]=] two]==] 
]]

-- This is a string delimited with long brackets
[=[one ]] two]=]
--> 'one ]] two'

PostgreSQL 允许这样做:https://www.postgresql.org/docs/8.0/static/sql-syntax.html#SQL-SYNTAX-DOLLAR-QUOTING

它最常用于定义存储过程,像这样(参见 $$ 的):

CREATE OR REPLACE FUNCTION increment(i integer) RETURNS integer AS $myAddOne$ BEGIN RETURN i + 1; END; $myAddOne$ LANGUAGE plpgsql;

但是,我不知道还有其他人。

UNIX shell(及其衍生版本)、Perl、PHP 和 Ruby(至少)支持 HEREDOCs,其中任何内容都可以用作定界标签.