我得到了bash的概念,现在,我发现了一个充满谜语的网站,用于练习bash。我解决了几个脚本(你应该提到他们做了什么,他们缺少什么,或者等等,取决于问题)并且我碰到了这个脚本:
random_var="$(echo $1 | sed -e 's/[^[:alnum:]]//g')"
如果我对以下代码的基本假设有误,请纠正我:
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
答案 0 :(得分:1)
脚本测试字符串以查看它是否包含任何非字母数字字符。
正如Avinash在评论中提到的,sed命令会删除所有非字母数字字符。在函数内,$input
具有与调用范围相同的值,这与第一个参数$1
相同。这可能有点令人困惑......
如果$somevar
与$input
(=$1
)不同,那么这意味着sed已经以某种方式更改了字符串。因此,该字符串必须至少包含一个非字母数字字符。
如果函数返回1(输入中有一些非字母数字字符),则! func
为false,因此将执行else
分支,脚本将返回退出代码0(成功)。否则,脚本将返回非零退出代码,表示失败。