Подстановка параметров Bash в командах

Это невозможно в текущей версии upstrem openssh . Но я работал над патчем, который обеспечивал бы эту функциональность как для клиента, так и для сервера.

В настоящее время он доступен для Fedora из репозитория copr . Патчи отслеживаются в вышестоящей версии bugzilla как ошибки # 1585 и # 2468 , и я буду рад некоторым отзывам и тестированию.

Обновление: Ошибка # 1585 была обновлена, но разработчиком openssh, поэтому мы можем ожидать некоторого прогресса в ближайшем будущем.

3
04.10.2018, 13:35
2 ответа

Подстановка параметров так не работает, по крайней мере, в bash. Вам нужна реальная переменная (параметр )и непосредственно работать с ней. Так например вот так:

var=$(echo abcdefgh | cmd1 | cmd2 |... )
var2="${var:2:4}"

Исключение составляет zsh, где вы можете преобразовать подстановку команды в параметр "на лету" и сделать выше в одной строке:

var2=${"$(echo abcdefgh | cdm1 | cmd2 |... )":2:4}
5
27.01.2020, 21:10

Обратите внимание, что:

echo $greeting | md5sum

Или точнее:

printf '%s\n' "$greeting" | md5sum

Выдает не хэш MD5 содержимого переменной, а содержимое переменной, за которым следует символ новой строки. Для хэша MD5 содержимого переменной:

printf %s "$greeting" | md5sum

Для первых 6 байтов, с некоторыми headреализациями:

printf %s "$greeting" | md5sum | head -c 6

или более портативный:

printf %s "$greeting" | md5sum | dd bs=1 count=6 2> /dev/null
4
27.01.2020, 21:10

Теги

Похожие вопросы