CommandLineToolkit

Форк
0
/
String+ShellEscaping.swift 
36 строк · 878.0 Байт
1
import Foundation
2

3
private func inShellBlacklist(_ codeUnit: UInt8) -> Bool {
4
    switch codeUnit {
5
    case UInt8(ascii: "a")...UInt8(ascii: "z"),
6
         UInt8(ascii: "A")...UInt8(ascii: "Z"),
7
         UInt8(ascii: "0")...UInt8(ascii: "9"),
8
         UInt8(ascii: "-"),
9
         UInt8(ascii: "_"),
10
         UInt8(ascii: "/"),
11
         UInt8(ascii: ":"),
12
         UInt8(ascii: "@"),
13
         UInt8(ascii: "%"),
14
         UInt8(ascii: "+"),
15
         UInt8(ascii: "="),
16
         UInt8(ascii: "."),
17
         UInt8(ascii: ","):
18
        return false
19
    default:
20
        return true
21
    }
22
}
23

24
extension StringProtocol {
25
    public func shellEscaped() -> Self {
26
        if isEmpty {
27
            return "''"
28
        }
29

30
        if utf8.contains(where: inShellBlacklist) {
31
            return "'\(self.replacingOccurrences(of: "'", with: "'\\''"))'"
32
        }
33

34
        return self
35
    }
36
}
37

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.