簡體   English   中英

如何檢查 Bash 或 Unix shell 中字符串的第一個字符?

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

我正在 Unix 中編寫腳本,我必須檢查字符串中的第一個字符是否為“/”,如果是,則分支。

例如,我有一個字符串:

/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

還要考慮與大多數基於 sh 的 shell 兼容的 case 語句:

case $str 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。

另請參閱: 如何在 shell 腳本中提取字符串的前兩個字符?

代碼:

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

Output:

P

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM