bash: 在 while 循环中切入时保留白色字符

bash: preserve white character when cutting in a while loop

看起来像 while read line 丢弃了空白的第一个字符

while read line; 
 do DB=$(  echo "$line" | cut -c1-8);           
 echo DB=$DB; 
 echo $line; 
done < histogram.txt

文字

      7107: ( 12,255,  0) #0CFF00 srgb(12,255,0)
      4514: ( 12,255,255) #0CFFFF srgb(12,255,255)
     11580: ( 30,  0,253) #1E00FD srgb(30,0,253)
     14365: (246,255,  0) #F6FF00 srgb(246,255,0)
     29576: (255,  0,  0) #FF0000 red
____188858: (255,255,255) #FFFFFF white

第 1 行“....7107”的预期结果 (.= space) 我真正得到的是“7107:(”

最后一行有效 ("____1888") 因为我用下划线替换了 space 结果

那么如何获取空白字符?

你需要两样东西:

  1. read 命令的 IFS 设置为空字符串:while IFS= read -r line -- 这将保留变量中的所有空格

  2. 引用变量到处你用它:echo "$line"

while IFS= read -r line; do
  DB="${line:1:8}"
  echo "DB=$DB"
  echo "$line"
done < histogram.txt

bash 参数替换可以带一个子串,所以你不需要 cut