如何在循环结束时回显?

时间:2015-07-06 15:16:19

标签: shell while-loop

问题:

我有一个在while循环中定义的变量。我建立了这个变量,最后我想回应它。像这样:

function removeCarriageReturn()
{
  word=""

  echo "${1}" | while IFS= read -r -n1 char ; do
    if [ "${char}" != $"\r" ] ; then
      word="${word}${char}"
    fi
  done && echo ${word}
}

我不知道怎么做。如果我之后做回声,那么单词是空的,因为while就像一个子shell。

1 个答案:

答案 0 :(得分:3)

你正在使用bash吗?根据{{​​1}}声明和function,它看起来像你。如果是这样,那就有一个非常简单的解决方案:

$'\r'

这里我使用bash here string function removeCarriageReturn() { local word while IFS= read -r -n1 char ; do if [ "${char}" != $"\r" ] ; then word="${word}${char}" fi done <<<"$1" && echo "$word" } 将值传递给循环,而不是将<<<与管道一起使用。使用导致循环在子shell中运行的管道。

顺便说一下,在变量周围使用大括号(例如echo)在某些地方可能很有用,但实际上并不能保护你免受单词拆分或全局扩展。最好引用你的变量(即使用${word}代替)。即使在"$word"等看似良性的情况下,例如,如果单词中有echo ${word},您可能会被发现。

更好的是,使用*,原因如上Charles' comment中提到的那样。

正如Charles所提到的,您应该使用printf '%s\n' "$word"local,以便在本地范围内声明declare

相关问题