Shell 如何在循环结束时回音?

Shell 如何在循环结束时回音?,shell,while-loop,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循环中定义的变量。我构建了这个变量,最后我想回显它。像这样:

function removeCarriageReturn()
{
  word=""

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

我不知道怎么做。如果我在之后执行echo,则单词是空的,因为while就像一个子shell。

您使用的是bash吗?根据
函数
声明和
$'\r'
,您看起来是这样的。如果是这样,有一个非常简单的解决方案:

function removeCarriageReturn()
{
  local word

  while IFS= read -r -n1 char ; do
    if [ "${char}" != $"\r" ] ; then
      word="${word}${char}"
    fi
  done <<<"$1" && echo "$word"
}
函数removeCarriageReturn()
{
本地词
而IFS=read-r-n1 char;do
如果[“${char}”!=$“\r”];则
word=“${word}${char}”
fi

完成了这应该是什么语言?抱歉,习惯的力量我设置了错误的tagBashFAQ#24----在点上。顺便说一句,
echo${word}
仍然通过字符串拆分、全局扩展等方式将内容放入;不能保证打印
word
的确切内容。使用
printf'%s\n'$word更安全
——是引号,而不是大括号,增加了防止全局扩展和字符串拆分的安全性,
echo
已被弃用——请参阅POSIX规范,特别是应用程序用法和基本原理部分。(我还反对使用
function
关键字——它与POSIX sh函数声明语法不兼容,但与其他bashism(如
$”
不同,您刚刚解决了2个问题!在您回答之前,我不知道为什么我的循环有时位于子shell中!!谢谢!“!我建议尽量使用
printf'%s\n'”$word”
——如果
word
-n
或(在特别不符合要求的实现,如bash的
-e
)的话,即使
echo“$word”
,也不会在平台间保持一致的行为。”。