How can I check the first character in a string in Bash or Unix shell?

StringBashUnixCharacterExitstatus

String Problem Overview


I'm writing a script in Unix where I have to check whether the first character in a string is "/" and if it is, branch.

For example, I have a string:

/some/directory/file

I want this to return 1, and:

server@10.200.200.20:/some/directory/file

to return 0.

String Solutions


Solution 1 - String

There are many ways to do this. You could use wildcards in double brackets:

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

You can use substring expansion:

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

Or a regex:

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

Solution 2 - String

Consider the case statement as well which is compatible with most sh-based shells:

case $str in
/*)
    echo 1
    ;;
*)
    echo 0
    ;;
esac

Solution 3 - String

$ foo="/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
1
$ foo="[email protected]:/some/directory/file"
$ [ ${foo:0:1} == "/" ] && echo 1 || echo 0
0

Solution 4 - String

cut -c1

This is POSIX, and unlike case, it actually extracts the first character if you need it for later:

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 is another POSIX command, but less efficient alternative:

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

printf '%s' is to avoid problems with escape characters: https://stackoverflow.com/questions/40423203/bash-printf-literal-verbatim-string/40423558#40423558, e.g.,

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

outputs \ as expected.

${::} does not seem to be POSIX.

See also: https://stackoverflow.com/questions/1405611/extracting-first-two-characters-of-a-string-shell-scripting

Solution 5 - String

Code:

 place="Place"
 fchar=${place:0:1}
 echo $fchar

Output:

P

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestioncanecseView Question on Stackoverflow
Solution 1 - Stringuser000001View Answer on Stackoverflow
Solution 2 - StringkonsoleboxView Answer on Stackoverflow
Solution 3 - StringdevnullView Answer on Stackoverflow
Solution 4 - StringCiro Santilli Путлер Капут 六四事View Answer on Stackoverflow
Solution 5 - StringnaqviO7View Answer on Stackoverflow