1

在此示例中,我希望它知道 $@ 是否包含两个单词/符号“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

但是如果两个单词/符号出现在随机的地方,我不知道该怎么做。

更新:

输入将是模块命令。在这种情况下,我想知道是否是带有或不带有 / 指示版本的模块加载。该命令将如下所示

1) 模块加载应用程序名/1.1.1 或
2) 模块加载应用程序名
3) 模块(不加载)(列表、可用性等)

这是我现在感兴趣的第一名。
3 在某些情况下是 1 的变体。
2 将按原样运行,但会包含给用户的消息

4

3 回答 3

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

(当我解释您的问题时,您希望一个参数完全是“加载”,而另一个参数包含一个斜杠。)

于 2012-10-24T13:21:23.650 回答
0

这样的事情是可能的:

如果 [[ ${@} =~ .*/.* && ${@} =~ ((^)|([ ]))load(($)|([ ])) ]]
然后
  回声
菲

-或者-

如果加载=0 && 斜线=0 && \
   ${@} 中的 ARG;
   做
     如果 [ "${ARG#*/}" != "${ARG}" ]; 然后斜线=1;菲
     如果 [ "${ARG}" = "加载" ]; 然后负载=1;菲
   完成 && [ "${LOAD}${SLASH}" = "11" ];
然后
  回声
菲

-或者-

函数加载斜杠()
{
  加载=0 && 斜线=0
  ${@} 中的 ARG;
  做
    如果 [ "${ARG#*/}" != "${ARG}" ]; 然后斜线=1;菲
    如果 [ "${ARG}" = "加载" ]; 然后负载=1;菲
  完毕
  测试“${LOAD}${SLASH}”=“11”
}

如果加载斜线 ${@}
然后
  回声
菲
于 2012-10-24T13:47:17.327 回答
0

这将满足您的要求

if [[ $1 == "load" ]]; then
    if [[ $2 == */* ]]; then
        do first case
    else
        do second case
    fi
else
    do third case
fi
于 2012-10-24T13:53:10.960 回答