sed中的脚本 - linux

时间:2015-01-23 14:37:36

标签: linux bash sed

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

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

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

  • $ 1是脚本获得的第二个参数(当第一个是脚本名称时)
  • 在第二个参数和sed脚本之间有一个管道,它删除了所有的字母数字和...根据我的理解,这个脚本可以被打破"使用[/\]^$等分隔符?

现在,遇到了困难(好吧,对我而言),程序从用户那里得到一个输入,当我刚才提到的下面的脚本在一个函数中找到,如果输入与结果不同则返回true。我不知道这里发生了什么,有人可以启发我吗?

#!/bin/sh

func()
{
  somevar="$(echo $1 | 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

1 个答案:

答案 0 :(得分:1)

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

正如Avinash在评论中提到的,sed命令会删除所有非字母数字字符。在函数内,$input具有与调用范围相同的值,这与第一个参数$1相同。这可能有点令人困惑......

如果$somevar$input=$1)不同,那么这意味着sed已经以某种方式更改了字符串。因此,该字符串必须至少包含一个非字母数字字符。

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