目标

ZSH 脚本中,对于给定的参数,我想获取第一个字符串和其余字符串。

例如,当脚本命名为test

sh test hello

应该提取hello

ZSH manual

http://zsh.sourceforge.net/Doc/zsh_a4.pdf

说:



Q1

因此,我在名为test的文件中编写了一个Shell脚本
echo $1
echo $1[1,1]

终端:
$ sh test hello
hello
hello[1,1]

结果失败。代码有什么问题?

第2季

我也不知道如何从n提取subString到最后一个。也许我必须使用正则表达式拆分数组?

编辑:Q3

这可能是另一个问题,因此如果合适的话启动新的Thread,我会这样做。

感谢@skishore这是进一步的代码
#! /bin/zsh

echo $1

ARG_FIRST=`echo $1 | cut -c1`
ARG_REST=`echo $1 | cut -c2-`
echo ARG_FIRST=$ARG_FIRST
echo ARG_REST=$ARG_REST

if $ARG_FIRST = ""; then
  echo nullArgs
else
  if $ARG_FIRST = "@"; then
    echo @Args
  else
    echo regularArgs
  fi
fi

我不确定如何将字符串贵重物品与字符串进行比较,但是对于给定的args hello
结果:
command not found: h

代码有什么问题?

编辑2:

我发现正确的
#! /bin/zsh

echo $1

ARG_FIRST=`echo $1 | cut -c1`
ARG_REST=`echo $1 | cut -c2-`
echo ARG_FIRST=$ARG_FIRST
echo ARG_REST=$ARG_REST

if [ $ARG_FIRST ]; then
  if [ $ARG_FIRST = "@" ]; then
    echo @Args
  else
    echo regularArgs
  fi
else
  echo nullArgs
fi

编辑3:

总体而言,这就是我对这个问题所做的工作。

https://github.com/kenokabe/GitSnapShot

GitSnapShot 是用于Git命令的ZSH精简包装,可简化使用

最佳答案

您可以使用cut命令:

echo $1 | cut -c1
echo $1 | cut -c2-

使用$()将这些值分配给变量:
ARG_FIRST=$(echo $1 | cut -c1)
ARG_REST=$(echo $1 | cut -c2-)
echo ARG_FIRST=$ARG_FIRST
echo ARG_REST=$ARG_REST

您也可以用反引号替换$(),但是建议使用前引号,由于嵌套问题,不建议使用后者。

关于ZSH子字符串提取,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18178075/

10-16 03:44