目标
在 ZSH 脚本中,对于给定的参数,我想获取第一个字符串和其余字符串。
例如,当脚本命名为test
时
sh test hello
应该提取
h
和ello
。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/