shell脚本吧 关注:331贴子:704
  • 5回复贴,共1

求助, 函数如何能像内置的功能一样读取不定参数

只看楼主收藏回复

萌新想不出来如何处理不定参数
比如内置的echo, 中间可以随便加-c -e -n, 这些选项的个数和顺序都不影响echo功能的正常运行
最初是我想方便的给字符串上色, 就在网上抄了个函数 : 第一个参数是颜色, 最后一个是字符串

在进一步使用中, 我有些地方需要暂时不换行, 也就是里面再加个 -n 参数或者更多参数, 也就是$1 是颜色, $2, $3,...这些是[-n -e .....]选项, 最后一个$n才是要处理的字符串. 希望能简洁, 而不是穷举出来解决
不局限于这个问题, 为了方便以后解决同类问题, 想问下大佬们, 这种不定个数和顺序的参数的问题如何简洁, 高效的处理


IP属地:山东1楼2021-01-14 23:51回复
    shift命令可以用来弹出(?)一个或多个参数
    或者还可以用数组保存
    举个例子:
    function argsave(){
    if [ -n "$1" ];then
    args=("$@")
    echo "The last argument is: ${args[$[${#args[@]}-1]]}"
    fi
    }


    IP属地:上海2楼2021-01-15 21:52
    回复
      给出以上函数的三种实现吧:
      function argsave_array(){
      if [ -n "$1" ];then
      args=("$@")
      echo "The last argument is: ${args[$[${#args[@]}-1]]}"
      fi
      }
      function argsave_eval(){
      if [ -n "$1" ];then
      cmd='last=$'"$#"
      eval "$cmd"
      echo "The last argument is: $last"
      fi
      }
      function argsave_shift(){
      if [ -n "$1" ];then
      shift $[$#-1]
      echo "The last argument is: $1"
      fi
      }
      可以自己选择三种方式的其中一种。


      IP属地:上海3楼2021-01-15 21:58
      收起回复