sed 中的脚本 - linux

Scripts in sed - linux

我明白了bash的概念,现在,我发现了一个充满谜语练习的网站bash。我解决了几个脚本(你应该提到它们做了什么,它们缺少什么等等,取决于问题)并且我遇到了这个脚本:

random_var="$(echo  | sed -e 's/[^[:alnum:]]//g')"

如果我对以下代码的基本假设有误,请纠正我:

现在,困难来了(好吧,对我来说),程序从用户那里获得输入,当我刚刚提到的以下脚本在一个函数中找到时,如果输入与结果不同则返回 true .我不知道这里发生了什么,有人能告诉我吗?

#!/bin/sh

func()
{
  somevar="$(echo  | sed -e 's/[^[:alnum:]]//g')"

  if [ "$somevar" != "$input" ] ; then
    return 1
  else
    return 0
  fi
}

# Sample usage of this function in a script

echo -n "Enter input: "
read input

if ! func "$input" ; then
  echo "HELL NO"
  exit 1
else
  echo "YES!"
fi

exit 0

该脚本测试一个字符串以查看它是否包含任何非字母数字字符。

正如 Avinash 在评论中提到的,sed 命令删除了所有非字母数字字符。在函数内,$input 与调用范围内的值相同,也与第一个参数 </code> 相同。这可能有点令人困惑...</p> <p>如果 <code>$somevar 不同于 $input (=),那么这意味着 sed 以某种方式更改了字符串。因此,该字符串必须包含至少一个非字母数字字符。

如果函数returns 1(输入中有一些非字母数字字符),则! func为假,因此else分支将被执行,并且脚本将 return 退出代码为 0(成功)。否则,脚本将 return 一个非零退出代码,表示失败。