Intereting Posts

Как проверить, начинается ли строка со значением, содержащим #, вкладку и, возможно, пространство?

В моем сценарии bash я хочу проверить, начинается ли строка с # modified: или # new file: В обоих случаях символ после # является вкладкой. В последнем случае символ между «новым» и «файлом» является пространством.

Я пытался:

if [[ $outline == "#\tmodified:*" ]]; then

а также

if [[ $outline == "# modified:*" ]]; then if [[ $outline == "# modified:*" ]]; then (нажмите фактическую вкладку после #)

Но никто не работал. Как мне это сделать?

С любой оболочкой POSIX:

 tab=$(printf '\t') # or tab=' ' # (a real tab character) case $outline in ("#${tab}modified:"*) ... esac 

С ksh93 , zsh или bash :

 case $outline in ($'#\tmodified:'*) ... esac 

или:

 if [[ $outline = $'#\tmodified:'* ]]; then... 

Ключ:

  • * не следует указывать, иначе это берется буквально.
  • \t расширяется только в типе $'...' (или printf в аргументе формата)

Вы можете использовать оператор bash regex string =~ :

 outline="# modified: Jan 10 2015" # or outline="# new file: hello.sh" if [[ $outline =~ ^#\ (modified|new file): ]]; then echo match else echo no match fi 

Обратите внимание, что как белые пробелы перед modified экземплярами кода, так и пробел перед new file являются вкладками. пустое пространство внутри new file является обычным пространством.

(Отредактировано для соответствия любому из двух форматов.)