sed 中的脚本 - linux
Scripts in sed - linux
我明白了bash的概念,现在,我发现了一个充满谜语练习的网站bash。我解决了几个脚本(你应该提到它们做了什么,它们缺少什么等等,取决于问题)并且我遇到了这个脚本:
random_var="$(echo | sed -e 's/[^[:alnum:]]//g')"
如果我对以下代码的基本假设有误,请纠正我:
- $1 是脚本得到的第二个参数(当第一个是脚本名称时)
- 在第二个参数和删除所有字母数字的
sed
脚本之间有一个管道......根据我的理解,这个脚本可以是 "broken" 通过使用这样的分隔符作为 [/\]^$
等等 ?
现在,困难来了(好吧,对我来说),程序从用户那里获得输入,当我刚刚提到的以下脚本在一个函数中找到时,如果输入与结果不同则返回 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 一个非零退出代码,表示失败。
我明白了bash的概念,现在,我发现了一个充满谜语练习的网站bash。我解决了几个脚本(你应该提到它们做了什么,它们缺少什么等等,取决于问题)并且我遇到了这个脚本:
random_var="$(echo | sed -e 's/[^[:alnum:]]//g')"
如果我对以下代码的基本假设有误,请纠正我:
- $1 是脚本得到的第二个参数(当第一个是脚本名称时)
- 在第二个参数和删除所有字母数字的
sed
脚本之间有一个管道......根据我的理解,这个脚本可以是 "broken" 通过使用这样的分隔符作为[/\]^$
等等 ?
现在,困难来了(好吧,对我来说),程序从用户那里获得输入,当我刚刚提到的以下脚本在一个函数中找到时,如果输入与结果不同则返回 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 一个非零退出代码,表示失败。