我在Unix中写了一个脚本,我必须检查字符串中的第一个字符是否是“/”,如果是,则进行分支。例如,我有一个字符串:
/some/directory/file
我希望返回1,并且:
server@10.200.200.20:/some/directory/file
返回0。
bsxbgnwa1#
有许多方法可以做到这一点。您可以在双括号中使用通配符:
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
olqngx592#
考虑case语句,它与大多数基于sh的shell兼容:
case $str in /*) echo 1 ;; *) echo 0 ;; esac
8hhllhi23#
$ 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
e4eetjau4#
printf '%c“$s”
printf '%c
brunoais在评论中提到了这一点,它可能是最佳选择,因为:
如果参数操作数未完全用于b、c或s转换,则不应将其视为错误。
case
cut -c1
printf
myvar=abc first_char="$(printf '%c' "$myvar")" if [ "$first_char" = a ]; then echo 'starts with a' else echo 'does not start with a' fi
这是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命令,但效率较低:
awk substr
printf '%s' "$myvar" | awk '{print substr ($0, 0, 1)}'
printf '%s'是为了避免转义字符的问题:*Bash printf文字逐字字符串 *,例如:
printf '%s'
myvar='\n' printf '%s' "$myvar" | cut -c1
如预期输出\。${::}似乎不是POSIX。另请参阅:* How can I extract the first two characters of a string in shell scripting? *
\
${::}
bnlyeluc5#
编码:
place="Place" fchar=${place:0:1} echo $fchar
输出量:
P
5条答案
按热度按时间bsxbgnwa1#
有许多方法可以做到这一点。您可以在双括号中使用通配符:
可以使用子字符串扩展:
或正则表达式:
olqngx592#
考虑case语句,它与大多数基于sh的shell兼容:
8hhllhi23#
e4eetjau4#
printf '%c
“$s”brunoais在评论中提到了这一点,它可能是最佳选择,因为:
如果参数操作数未完全用于b、c或s转换,则不应将其视为错误。
case
cut -c1
不同的是,printf
是内置的Bash,因此速度可能会更快一些cut -c1
这是POSIX,与
case
不同:awk substr
是另一个POSIX命令,但效率较低:printf '%s'
是为了避免转义字符的问题:*Bash printf文字逐字字符串 *,例如:如预期输出
\
。${::}
似乎不是POSIX。另请参阅:* How can I extract the first two characters of a string in shell scripting? *
bnlyeluc5#
编码:
输出量: