Может ли bash преобразовать строковую переменную в кавычки и / или экранированную строку в слова?

awk '{print $2}' new-word-freq.txt
2
23.05.2017, 15:40
1 ответ

Используйте read :

read -a ssh_args <<< "${SSH_ORIGINAL_COMMAND}"
set -- "${ssh_args[@]}"

Это проанализирует слова из SSH_ORIGINAL_COMMAND в массив ssh_args , обрабатывая обратную косую черту ( \ ) как escape-символ. Затем элементы массива передаются в качестве аргументов в набор . Он работает со списком аргументов, передаваемым через ssh следующим образом:

$ ssh some_server foo 'bar\ car' baz
$ ssh some_server foo bar\\ car baz

printf "% q" цитирует оболочку ssh позволяет это:

$ sshwrap some_server foo bar\ car baz
$ sshwrap some_server foo 'bar car' baz

Вот такой пример оболочки:

#!/bin/bash
h=$1; shift
QUOTE_ARGS=''
for ARG in "$@"
do
  ARG=$(printf "%q" "$ARG")
  QUOTE_ARGS="${QUOTE_ARGS} $ARG"
done
ssh "$h" "${QUOTE_ARGS}"
3
27.01.2020, 22:10

Теги

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