这些命令的不同行为
我无法理解为什么在不同发行版上执行时这 3 个命令的输出存在差异 你们能帮我理解为什么吗?
printf "%s" `echo ../.. | sed 's/[.]/\\&/g'`
output on kali: &&/&&~ output on ubuntu: &&/&&
printf "%s" $(echo ../.. | sed 's/[.]/\\&/g')
output on kali: \.\./\.\. output on ubuntu: ../..
printf "%s" "$(echo ../.. | sed 's/[.]/\\&/g')"
output on kali: \.\./\.\. output on ubuntu: \.\./\.\.
I'm having trouble understanding why there is a difference in the outputs of these 3 commands when executed on different distributions
Could you guys help me understand why ?
printf "%s" `echo ../.. | sed 's/[.]/\\&/g'`
output on kali: &&/&&~ output on ubuntu: &&/&&
printf "%s" $(echo ../.. | sed 's/[.]/\\&/g')
output on kali: \.\./\.\. output on ubuntu: ../..
printf "%s" "$(echo ../.. | sed 's/[.]/\\&/g')"
output on kali: \.\./\.\. output on ubuntu: \.\./\.\.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Kali 使用 Zsh shell。 Ubuntu 使用 Bash shell。
不要使用反引号 - 最好使用
$(...)
。反引号在执行之前删除\
。变为:
因此将
.
替换为&
字符。Zsh 配置中末尾的
~
表示不带换行符的命令的输出。这应该是可以理解的。
啊啊,这是 Bash 5.0 周围最难的一个。命令替换的未加引号的结果会进行文件名扩展(也称为路径名扩展)。
\.\./\.\.
与目录路径../..
匹配。 Bash 5.0 引入了一项更改,即使扩展结果没有任何通配符特殊字符,也会进行路径名扩展。Bash 5.1 中逆转了这一变化。 Bash-5.1-alpha 可供下载 https://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html。
Kali uses Zsh shell. Ubuntu uses Bash shell.
Do not use backticks - prefer
$(...)
. Backticks remove\
before execution.becomes:
So replaces
.
by&
character.The
~
on the end in Zsh in your configuration represents output from a command without a newline.That should be understandable.
Aaaand this is the hard one around Bash 5.0. Unquoted result of command substitution undergo filename expansion (also called pathname expansion). The
\.\./\.\.
matches the directory path../..
. Bash 5.0 introduced a change that would make the result of expansion undergo pathname expansion even if it doesn't have any globbing special characters.The change was reversed in Bash 5.1. Bash-5.1-alpha available for download https://lists.gnu.org/archive/html/bug-bash/2019-01/msg00063.html.