如何在Bash或UNIX shell中检查字符串中的第一个字符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Bash或UNIX shell中检查字符串中的第一个字符?相关的知识,希望对你有一定的参考价值。

我在UNIX中编写脚本,我必须检查字符串中的第一个字符是否为“/”,如果是,则为branch。

例如,我有一个字符串:

/some/directory/file

我希望这返回1,并且:

server@10.200.200.20:/some/directory/file

返回0。

答案

许多方法可以做到这一点。您可以在双括号中使用通配符:

str="/some/directory/file"
if [[ $str == /* ]]; then echo 1; else echo 0; fi

您可以使用子字符串扩展:

if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi

或正则表达式:

if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi
另一答案

考虑case语句,它与大多数基于sh的shell兼容:

case "$STRING" in
/*)
    echo 1
    ;;
*)
    echo 0
    ;;
esac
另一答案
$ foo="/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
1
$ foo="server@10.200.200.20:/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
0
另一答案

cut -c1

这是POSIX,与case不同,如果你以后需要它,它实际上会提取第一个字符:

myvar=abc
first_char="$(printf '%s' "$myvar" | cut -c1)"
if [ "$first_char" = a ]; then
  echo 'starts with a'
else
  echo 'does not start with a'
fi

awk substr是另一个POSIX但效率较低的替代品:

printf '%s' "$myvar" | awk '{print substr ($0, 0, 1)}'

printf '%s'是为了避免逃脱字符的问题:https://stackoverflow.com/a/40423558/895245例如:

myvar='\n'
printf '%s' "$myvar" | cut -c1

按预期输出\

${::}似乎不是POSIX。

另见:How to extract the first two characters of a string in shell scripting?

以上是关于如何在Bash或UNIX shell中检查字符串中的第一个字符?的主要内容,如果未能解决你的问题,请参考以下文章

什么相当于 Windows 10 PowerShell 中的 bash/shell/UNIX-terminal 命令“which”?

如何判断字符串是不是未在 Bash shell 脚本中定义

如何检查 Docker 是不是安装在 Unix shell 脚本中? [复制]

编写Shell脚本

如何强制 Git for Windows 的 bash-shell 不将路径字符串转换为 Windows 路径?

如何在Unix控制台或Mac终端上运行shell脚本?