can*_*cse 62 unix string bash character exitstatus
我在UNIX中编写脚本,我必须检查字符串中的第一个字符是否为"/",如果是,则为branch.
例如,我有一个字符串:
/some/directory/file
Run Code Online (Sandbox Code Playgroud)
我希望这返回1,并且:
server@10.200.200.20:/some/directory/file
Run Code Online (Sandbox Code Playgroud)
返回0.
use*_*001 113
许多方法可以做到这一点.您可以在双括号中使用通配符:
str="/some/directory/file"
if [[ $str == /* ]]; then echo 1; else echo 0; fi
Run Code Online (Sandbox Code Playgroud)
您可以使用子字符串扩展:
if [[ ${str:0:1} == "/" ]] ; then echo 1; else echo 0; fi
Run Code Online (Sandbox Code Playgroud)
或正则表达式:
if [[ $str =~ ^/ ]]; then echo 1; else echo 0; fi
Run Code Online (Sandbox Code Playgroud)
kon*_*box 14
考虑case语句,它与大多数基于sh的shell兼容:
case "$STRING" in
/*)
echo 1
;;
*)
echo 0
;;
esac
Run Code Online (Sandbox Code Playgroud)
$ 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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
awk substr 是另一种 POSIX 但效率较低的替代方案:
printf '%s' "$myvar" | awk '{print substr ($0, 0, 1)}'
Run Code Online (Sandbox Code Playgroud)
printf '%s'是为了避免转义字符出现问题:https : //stackoverflow.com/a/40423558/895245例如:
myvar='\n'
printf '%s' "$myvar" | cut -c1
Run Code Online (Sandbox Code Playgroud)
输出\如预期。
${::} 似乎不是 POSIX。
另请参阅:如何在 shell 脚本中提取字符串的前两个字符?
| 归档时间: |
|
| 查看次数: |
97094 次 |
| 最近记录: |