Первый случай
docker run -it -e "name=JD" --entrypoint 'echo' ubuntu 'Hello $name'
Одиночная кавычка всегда препятствует расширению переменной. Все, что вы пишете в одинарных кавычках, остается неизменным. Попробуйте echo '$PWD'
в своем терминале, и вы увидите $PWD
в качестве выхода. Попробуйте echo "$PWD"
, и вы получите распечатанный рабочий каталог.
Второй случай
docker run -it -e "name=JD" --entrypoint 'echo' ubuntu "Hello $name"
Ваш код расширяется до запуска Docker. Ваша оболочка раскрывает всю строку и затем выполняет ее. В этот момент вы не объявили $name
и получили его пустым. Это означает, что внутри контейнера вы получаете команду "Hello "
, а не "Hello $name"
.
Если вы хотите отобразить переменную окружения изнутри контейнера, самый простой способ - обернуть скрипт в sh-файл , чтобы предотвратить его расширение и передать этот файл в контейнер.
Третий случай, я думаю, очевиден и не нуждается в объяснении.
Если необходимо рекурсивно вызвать через вывод команды, можно использовать for /f
. Что-то как:
for /f "usebackq" %%L in (`awk '/GPSID/ {print $3}' gora.RTK`) do (
awk 'BEGIN {printf "Numer seryjny : " %%L,$1}' >> out.txt
)
хорошо проблема решена
for /f "tokens=*" %%a in ('awk "/GPSID/ {print $3}" gora.RTK ') do set var=%%a
awk "BEGIN {printf \"GPSID : \" }" >out.txt
echo %var% >>out.txt
Этот код basicly делает то, что я хотел сделать.
Вы являетесь великими Спасибо!!!!!
Как насчет...
для/f "маркеры = *" %% в ('эхо Привет Мир') действительно устанавливают var = %% a
Примечание: используйте %a вместо %%, когда примеряющий командную строку еще сохранят его как %% при использовании в пакетном файле.
Где 'эхо Привет Мир' является командой, чья производит Вас, хотят получить, и "var" является названием переменной, где вывод будет сохранен.