gpt4 book ai didi

bash - 进程 argv 中的意外字符串转义

转载 作者:行者123 更新时间:2023-11-29 09:12:58 24 4
gpt4 key购买 nike

有点惊讶:

$ node -p 'process.argv' $SHELL '$SHELL' \t '\t' '\\t'
[ 'node', '/bin/bash', '$SHELL', 't', '\\t', '\\\\t' ]

$ python -c 'import sys; print sys.argv' $SHELL '$SHELL' \t '\t' '\\t'
['-c', '/bin/bash', '$SHELL', 't', '\\t', '\\\\t']

预期行为与 with 相同:

$ echo $SHELL '$SHELL' \t '\t' '\\t'
/bin/bash $SHELL t \t \\t

这就是我需要传递内容的方式。

为什么在进程 argv 中使用 '\t''\\t' 进行额外转义?为什么处理方式与 '$SHELL' 不同?这实际上是从哪里来的?为什么不同于 echo 行为?

首先,我认为这是 minimist 上的一些额外内容部分,但随后与裸 Node.js 和 Python 相同。这里可能遗漏了一些明显的东西。

最佳答案

使用$'...'形式传递转义序列,如\t\n\r、\0 等:

python -c 'import sys; print sys.argv' $SHELL '$SHELL' \t $'\t' $'\\t'
['-c', '/bin/bash', '$SHELL', 't', '\t', '\\t']

根据man bash:

Words of the form $'string' are treated specially. The word expands to string, with backslash-escaped characters replaced as specified by the ANSI C standard. Backslash escape sequences, if present, are decoded as follows:

\a     alert (bell)
\b backspace
\e
\E an escape character
\f form feed
\n new line
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\' single quote
\" double quote
\nnn the eight-bit character whose value is the octal value nnn (one to three digits)
\xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
\uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
\UHHHHHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
\cx a control-x character

关于bash - 进程 argv 中的意外字符串转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009295/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com