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将不匹配(并替换),您的varialbeRAW
将保持该值
您可能希望替换开头最多15个字符,如果是这种情况,您将需要:
RAW=$(echo $RAW | sed -r 's/^.{1,15}//')
也许你只是想要这个:
#!/bin/bash
RAW=012345678901234567890
.
.
.
RAW=${RAW:15}
echo $RAW
567890
+1.@user1772510,在bash中,您应该将
/
替换为
。第二,sed命令不能正常工作,所以RAW永远不会更改,这就是它进行无限循环的原因