gpt4 book ai didi

ZSH子字符串提取

转载 作者:行者123 更新时间:2023-12-04 13:19:42 24 4
gpt4 key购买 nike

目标

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

例如,当脚本命名为test

sh test hello

应该提取 hello

ZSH manual

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

说:

Subscripting may also be performed on non-array values, in which case the subscripts specify a substring to be extracted. For example, if FOO is set to ‘foobar’, then ‘echo $FOO[2,5]’ prints ‘ooba’.



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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com