Você não pode combiná-los com bash (ou POSIXly), você precisa fazer isso em duas etapas.
i=${x#*/}; i=${i%%/*}
Isso é portátil para qualquer shell POSIX. Se você precisa de portabilidade para o shell Bourne (mas por que você marcaria sua pergunta / bash ?), Caso você esteja migrando para o Solaris e forçado a usar /bin/sh em vez do padrão sh lá, ou portando para sistemas de 20 anos de idade), você poderia usar essa abordagem (que funcionará bem com shells POSIX):
IFS=/; set -f
set x $x
i=$3
(acima é um dos casos muito raros em que faz sentido deixar uma variável sem aspas).
Apenas para o registro, com zsh:
print -rl -- x86-headers/*/C/populate.sh(:h:h:t)
(o t ail da h ead do h ead do arquivo).
Ou para a sua abordagem python :
x=elf/C/populate.sh
i=${${(s:/:)x}[2]}