Как узнать имя хоста телефона Android для использования в SSH-соединении?

Разбиение на слова происходит довольно поздно при оценке команды. Что наиболее важно для вас, это происходит после раскрытия переменных и подстановки команд.

Это означает, что вторая строка в

s="echo a; echo b"
echo $($s)

сначала расширит $sдо echo a; echo b, а затем эта команда будет выполнена без разделения на составную команду, состоящую из двух echos.

(details:$sразбивается на четыре слова: echo, a;, echoи b. Инкапсулирующий $(...)выполняет это как одну команду, echoс тремя аргументами, a;, echoи b.)

То, что дается самому внешнему echo, является строкойa; echo b(на самом деле из трех слов, поскольку $(...)не заключено в кавычки ), так как это было то, что было выведено самым внутренним echo.

Сравните это с

s1="echo a"
s2="echo b"
echo $($s1;$s2)

что приводит к ожидаемому результату.

Да, "evalзло", большую часть времени,и sh -cнеуклюжий и такой же хрупкий. Но если у вас есть фрагмент кода оболочки, которому вы доверяете в строке в сценарии оболочки, то эти инструменты являются единственными (? )способ заставить этот код выполняться должным образом, так как это часто требует явной оценки текста в строке как кода оболочки (со всеми фазами оценки от начала до конца ). Особенно, если это составная команда.


Я думаю, что только из-за тесной связи оболочки Unix с текстом вам посчастливилось echo $($s)выполнить что-то вообще .

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

1
22.11.2019, 15:37
0 ответов

Теги

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