Skip to content

quote env value to fix syntax error on multiline env#510

Merged
cshuaimin merged 2 commits intomasterfrom
fix-env-multiline
Jul 22, 2022
Merged

quote env value to fix syntax error on multiline env#510
cshuaimin merged 2 commits intomasterfrom
fix-env-multiline

Conversation

@cshuaimin
Copy link
Copy Markdown
Contributor

@cshuaimin cshuaimin commented Jul 22, 2022

fixes #508

另外 shellescape 的实现也很有意思,它有一个白名单 \w@%+=:,./-,如果输入都在白名单内不做任何操作。如果出现了白名单外的字符,会在输入前后加单引号 ',因为 bash 中单引号字符串就是最纯粹的字符串,不会有插值之类的操作。唯一的问题就是如果输入本来就包含单引号会造成不匹配,而且无法通过用其他编程语言中常见的 \' 来表示,因为 bash 中 ANSI-C Quoting 需要用 $'' 字符串才行。shellescape 中是利用了 C 系语言中字符串的一个特性:相邻的字面量字符串会自动拼接在一起:

$ echo 'a''b'
ab

它会将原来存在的单引号 ' 替换成 '"'"' (单双单双单)。两边的单引号用来配对之前对前后添加的单引号,中间是双引号中间的单引号 "'",也就是长度为一的字符串。综上,原字符串 a'b 会变成三个字符串 'a' "'" 'b'(添加了空格帮助阅读)。

@cshuaimin cshuaimin requested a review from jysperm July 22, 2022 09:53
@jysperm
Copy link
Copy Markdown
Contributor

jysperm commented Jul 22, 2022

所以 #508 里这个例子输出是什么样的?

@cshuaimin
Copy link
Copy Markdown
Contributor Author

export LEAN_CLI_HAVE_STAGING=false
export ENV_VAR='$(ls)'
export MUL='a
b
c  h'

@cshuaimin cshuaimin merged commit d78a61d into master Jul 22, 2022
@cshuaimin cshuaimin deleted the fix-env-multiline branch July 22, 2022 10:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

环境变量通过 lean env 输出时应转义

2 participants