相关疑难解决方法(0)

为什么 shell 命令替换会吞下尾随的换行符?

根据以下示例,以及我最近的问题 在 bash 中,尾随的换行符去哪儿了?,我想知道它“为什么”发生

  x="$(echo -ne "a\nb\n")" ; echo -n "$x" | xxd -p 
# Output is: 610a62 
# The trailing newline from the 'echo' command
#   has been "deleted" by Command Substitution
Run Code Online (Sandbox Code Playgroud)

我认为shell 操作必须有一些非常重要的原因,即命令替换,从它正在替换的命令输出中实际删除一些数据......
但我无法理解这个,因为它似乎是它该做什么的对立面......即。将命令的输出传递回脚本进程......保留一个字符对我来说似乎很奇怪,但我认为有一个合理的原因......我很想知道这个原因是什么...... .

shell text-processing command-substitution

27
推荐指数
3
解决办法
5915
查看次数

在命令行中表示/引用 NUL

可以\0在命令行上使用吗?

背景

为了在 GNU Parallel 中测试极端情况,我很好奇是否在命令行中正确引用了所有字符。他们中的大多数是:

perl -e 'print pack ("c*",1..255,10)' | parallel -k echo | md5sum
d03484ca75b3e38be411198d66bf4611  -
perl -e 'print pack ("c*",1..255,10)' | md5sum
d03484ca75b3e38be411198d66bf4611  -
Run Code Online (Sandbox Code Playgroud)

\0似乎很棘手(此处用 说明A\0B\n):

perl -e 'print pack ("c*",65,0,66,10)' | wc -c
4 (A\0B\n)
perl -e 'print pack ("c*",65,0,66,10)' | parallel echo | wc -c
2 (A\n)
perl -e 'print pack ("c*",65,0,66,10)' | parallel --dry-run echo | wc -c
9 (echo A\0B\n)
perl -e 'print "echo ",pack ("c*",65,0,66,10)' …
Run Code Online (Sandbox Code Playgroud)

shell bash special-characters quoting binary

7
推荐指数
1
解决办法
2273
查看次数