在这个例子中,我希望它知道$ @是否包含两个单词/符号“load”和“/”
对于一个单词/符号,这是有效的
case "$@" in */*)
;;
echo "going to do stuff"
*)
echo "will do something else"
;;
esac
或
string='My string';
if [[ "$string" == *My* ]]
then
echo "It's there!";
fi
但如果两个单词/符号出现在随机位置,我就无法弄清楚如何去做。
更新
输入将是module命令。在这种情况下,我想知道是否是带有或不带/表示版本的模块加载。命令看起来像这样
1)模块加载appname / 1.1.1或
2)模块加载appname
3)模块(不加载)(列表,可用等)
现在我感兴趣的是1号。
在某些情况下,3将是1的变化
2将按原样运行,但将包含一条消息给用户
答案 0 :(得分:2)
缓慢的方法是迭代数组两次,然后检查是否存在“load”和“/”,如下所示:
for element in $@; do [[ "$element" == "load" ]] && loadPresent=1; done
for element in $@; do [[ "$element" =~ ".*/.*" ]] && slashPresent=1; done
if [[ $loadPresent == 1 ]] && [[ $slashPresent == 1 ]]; then
echo "Contains load and /"
fi
(正如我解释你的问题,你希望一个参数完全是“加载”而另一个参数包含一个斜杠。)
答案 1 :(得分:0)
这样的事情是可能的:
if [[ ${@} =~ .*/.* && ${@} =~ ((^)|([ ]))load(($)|([ ])) ]] then echo both fi
-OR -
if LOAD=0 && SLASH=0 && \ for ARG in ${@}; do if [ "${ARG#*/}" != "${ARG}" ]; then SLASH=1; fi if [ "${ARG}" = "load" ]; then LOAD=1; fi done && [ "${LOAD}${SLASH}" = "11" ]; then echo both fi
-OR -
function loadslash() { LOAD=0 && SLASH=0 for ARG in ${@}; do if [ "${ARG#*/}" != "${ARG}" ]; then SLASH=1; fi if [ "${ARG}" = "load" ]; then LOAD=1; fi done test "${LOAD}${SLASH}" = "11" } if loadslash ${@} then echo both fi
答案 2 :(得分:0)
这将满足您的要求
if [[ $1 == "load" ]]; then
if [[ $2 == */* ]]; then
do first case
else
do second case
fi
else
do third case
fi