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
结果
那么如何获取空白字符?
你需要两样东西:
将 read
命令的 IFS 设置为空字符串:while IFS= read -r line
-- 这将保留变量中的所有空格
引用变量到处你用它:echo "$line"
while IFS= read -r line; do
DB="${line:1:8}"
echo "DB=$DB"
echo "$line"
done < histogram.txt
bash 参数替换可以带一个子串,所以你不需要 cut
看起来像 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 结果
那么如何获取空白字符?
你需要两样东西:
将
read
命令的 IFS 设置为空字符串:while IFS= read -r line
-- 这将保留变量中的所有空格引用变量到处你用它:
echo "$line"
while IFS= read -r line; do
DB="${line:1:8}"
echo "DB=$DB"
echo "$line"
done < histogram.txt
bash 参数替换可以带一个子串,所以你不需要 cut