Соединение двух raspberry PI через Wi-Fi direct

Нет, здесь строки недоступны для ksh88и pdksh. Однако в более позднихksh93(оригинальных AT&T Korn Shell )иmksh(в настоящее время активно разрабатываемых pdkshпроизводных )он доступен.

<<<является одним из «современных» расширений оболочки, используемых ksh93, mksh, GNU bashи zsh.

Ваша конкретная проблема…

read A B C <<< $line

… можно обойти с помощью (оболочки Korn):

print -r -- $line |&
read -p A B C

Вы также можете использовать эту (оболочку POSIX ), она снижает производительность tmpfile, хотя (с другой стороны, <<<, вероятно, также имеет):

read A B C <<EOF
$line
EOF

Если вы просто хотите разделить слова:

set -A arrname -- $line

Затем используйте ${arrname[0]}вместо $Aи ${arrname[1]}вместо $B. Только он не остановится на разбиении на три элемента, так что если $lineравно "foo bar baz bla", то $Cбудет содержать "баз бла", тогда как ${arrname[2]}содержит "баз", а ${arrname[3]}содержит "бла".

Если вам не нужны позиционные параметры, вы можете

set -- $line
A=$1; shift
B=$1; shift
C=$*

shiftвызовет ошибки, если $lineсодержит менее трех слов, хотя (проверьте $#, если вы не уверены, или используйте [[ $line = *' '*' '[! ] ]](, вероятно, медленнее, хотя ), чтобы сначала проверить ).

Имейте в виду, что set … $lineтакже будет выполнять подстановку (спасибо Стефану за напоминание ), поэтому вам нужно set -o noglobперед (и, возможно, после этого восстановить предыдущее состояние, обычноset +o noglob).

Полное раскрытие :Я mkshразработчик.

0
27.05.2020, 18:50
0 ответов

Теги

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