diff --git a/src/lib/config/quote.ts b/src/lib/config/quote.ts index 7126fbfdb9..769dd24e0b 100644 --- a/src/lib/config/quote.ts +++ b/src/lib/config/quote.ts @@ -9,7 +9,7 @@ export function quote(s: string): string { .replaceAll(/(["\\$`!])/g, String.raw`\$1`) .replaceAll('\n', String.raw`\n`) + '"' - return "'" + s.replaceAll(/(['\\])/g, String.raw`\$1`) + "'" + return "'" + s + "'" } return s @@ -19,7 +19,7 @@ export function parse(a: string): string { if (a.startsWith('"')) { a = a.replaceAll(String.raw`\n`, '\n') } else if (a.startsWith("'")) { - a = a.replaceAll('\\\\', '\\') + // single-quoted strings are literal in POSIX sh — no unescaping needed } const parsed = shell.parse(a) diff --git a/test/unit/lib/config/quote.test.ts b/test/unit/lib/config/quote.test.ts index 5d51474ea5..2d251e7f2a 100644 --- a/test/unit/lib/config/quote.test.ts +++ b/test/unit/lib/config/quote.test.ts @@ -8,7 +8,7 @@ describe('quote', function () { ['ab$c', "'ab$c'"], ['a\'bc', '"a\'bc"'], ['a\nb\nc', String.raw`"a\nb\nc"`], - [String.raw`foo\nb:ar\bz`, String.raw`'foo\\nb:ar\\bz'`], + [String.raw`foo\nb:ar\bz`, String.raw`'foo\nb:ar\bz'`], ]) { it(`${a}===${b}`, function () { expect(quote(a)).to.eq(b)