Моя клавиатура пишет двойные кавычки вместо @

Если вы согласны с тем, что весь пакет (переменная/арифметика/расширение команд, подстановка и т. д. )поверх обработки кавычек, это подойдет:

echo '"a b" "x         y"' >a.txt

eval "set -- $(<a.txt)"
for b do
    printf 'b: %s\n' "$b"
done

b: a b
b: x         y

Измените $(<a.txt)на $(cat a.txt), если вы хотите, чтобы он работал в обычной оболочке, а не только вbash(или других расширенных оболочках, таких как zshилиksh). Вы можете использовать это только в том случае, если уверены, что можете контролировать содержимое a.txt, в противном случае будет тривиально использовать ваш скрипт с помощью разделения с помощью ;, расширения команды и т. д.

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

xargs <a.txt printf 'b: %s\n'

Но xargsбудет работать только с внешними командами, а не с функциями оболочки, будет игнорировать обратную косую черту внутри двойных кавычек, как и внутри одинарных кавычек, и не сможет анализировать многострочные строки.

Если с этими последними ограничениями все в порядке, вы все равно можете использовать xargsв качестве анализатора котировок через оболочку или массив:

mapfile -t args < <(xargs <a.txt printf '%s\n')
for b in "${args[@]}"; do
        printf 'b: %s\n' "$b"
done
0
29.06.2020, 00:28
1 ответ

Вы установили неправильную раскладку клавиатуры. У британцев двойная кавычка над цифрой 2. У США она рядом с клавишей Enter

.
1
18.03.2021, 23:24

Теги

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