Linux 字符串不为空时bash

Linux 字符串不为空时bash,linux,string,bash,Linux,String,Bash,我正在尝试设置一个解析字符串的脚本 我的循环当前是 while [ -n "$RAW" ]; do // do some processing here RAW=$(echo $RAW| sed -r 's/^.{15}//') done 但是,脚本似乎从未结束它没有结束,因为sed表达式不正确。它至少需要15个字符,不适用于少于15个字符的任何字符。试试这个: RAW=$(echo $RAW| sed -r 's/^.{0,15}//') 由于while循环中的逻辑,它可能

我正在尝试设置一个解析字符串的脚本

我的循环当前是

while [ -n "$RAW" ]; do
    // do some processing here
    RAW=$(echo $RAW| sed -r 's/^.{15}//')
done

但是,脚本似乎从未结束

它没有结束,因为
sed
表达式不正确。它至少需要15个字符,不适用于少于15个字符的任何字符。试试这个:

RAW=$(echo $RAW| sed -r 's/^.{0,15}//')

由于while循环中的逻辑,它可能不会结束

您正在执行的操作是覆盖变量
RAW

RAW=$(echo $RAW| sed -r 's/^.{15}//')
这意味着用空字符串匹配并替换原始变量中的前15个字符。只剩下10个字符了。在这种情况下,sed将不匹配(并替换),您的varialbe
RAW
将保持该值

您可能希望替换开头最多15个字符,如果是这种情况,您将需要:

RAW=$(echo $RAW | sed -r 's/^.{1,15}//')

也许你只是想要这个:

#!/bin/bash
RAW=012345678901234567890
.
.
.
RAW=${RAW:15}
echo $RAW
567890

+1.@user1772510,在bash中,您应该将
/
替换为
。第二,sed命令不能正常工作,所以RAW永远不会更改,这就是它进行无限循环的原因