Ваша команда cd
не выполняется, поскольку, как вы ее написали, ввод, обрабатываемый sed
, является выводом самой команды cd
, а не текстом переменной $1
.
Но вам не нужно sed
, чтобы вырезать части строки, вы можете сделать это только с помощью расширения параметров:
$ link='https://aur.archlinux.org/example.git'
$ echo "$(link="${link##*/}"; printf '%s' "${link%.git}")"
example
Однако, если вы пытаетесь cd
в каталог example
в вашем сценарии может работать следующее с использованием массива BASH_REMATCH
:
#!/usr/bin/env bash
link="$1"
if [[ $link =~ ^https?://.*/([^.]+).git$ ]]; then
cd "${BASH_REMATCH[1]}"
else
printf 'Invalid link: %s\n' "$link"
fi