Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 为什么这个awk代码段打印出双空格_Bash_Unix - Fatal编程技术网

Bash 为什么这个awk代码段打印出双空格

Bash 为什么这个awk代码段打印出双空格,bash,unix,Bash,Unix,我不太清楚为什么会这样 echo -n "$Line" | awk -v len1=$length -v len2=$longestLength -F\; '{printf "%-"len1"s" "%-"len2"s\n",$1,";"$2}' 打印双倍行距的结果 我问我的老师,他只说加上echo-n,把echo和awk放在同一行。我两个都做了,但都不起作用 $length是一个变量,它保存字符串的长度直到分号,$LONGESTLENGHT是一个变量,它保存字符串的总大小。 $Line应

我不太清楚为什么会这样

 echo -n "$Line" | awk -v len1=$length -v len2=$longestLength -F\; 
'{printf "%-"len1"s" "%-"len2"s\n",$1,";"$2}'
打印双倍行距的结果

我问我的老师,他只说加上echo-n,把echo和awk放在同一行。我两个都做了,但都不起作用

$length是一个变量,它保存字符串的长度直到分号,$LONGESTLENGHT是一个变量,它保存字符串的总大小。 $Line应该是一个简单的字符串,它通常包含某种值,例如

str: db 'Hello world!', 0Ah    ; message string with new-line char
它将打印出格式化的字符串,但也会打印出一个完全空的行,例如:

str: db 'Hello world!', 0Ah    ; message string with new-line char
(empty line goes here)
where is只应显示格式化的字符串

基本上不是

str: db 'Hello world!', 0Ah    ; message string with new-line char
                               ; at the end (10 decimal)
str_len: equ $ - str           ; calcs length of string (bytes) by
                               ; subtracting this address ($ symbol)
我明白了

多谢各位

编辑:

为了 回声“$Line”| od-tx1-tc

我得到的输出与此类似:

0000040  6c  20  74  6f  20  70  65  72  66  6f  72  6d  20  73  79  73
          l       t   o       p   e   r   f   o   r   m       s   y   s
0000060  74  65  6d  20  63  61  6c  6c  0a
          t   e   m       c   a   l   l  \n
0000071
int 80h                             ; interrupt kernel to perform system call                     

基本上我所有的字符串都以a结尾\n

嗨,我添加了一个编辑来解释它。谢谢。@Sheller:呃,那不是文本,他说他在
$Line
的末尾有一个LF字符。如果在命令行中执行
line=“Hello world!”
(其中
不是文本,而是按键),您可以自己测试它。但是-Pikachu,如果使用了
-n
选项,我也不会得到双空格。请运行
echo“$Line”| od-tx1-tc
并发布其输出。这是一个愚蠢的问题:您在上面两行中发布的代码实际上在一行中,不是吗?对不起。我是说“你的awk代码”
0000040  6c  20  74  6f  20  70  65  72  66  6f  72  6d  20  73  79  73
          l       t   o       p   e   r   f   o   r   m       s   y   s
0000060  74  65  6d  20  63  61  6c  6c  0a
          t   e   m       c   a   l   l  \n
0000071
int 80h                             ; interrupt kernel to perform system call