Я веду дневник TIL и ежедневно использую несколько сценариев Ruby и bash для создания файлов, добавления содержимого, создания псевдонимов и запуска этих файлов в виде сценариев.
upd: thisпроисходит только в Windows, больше информации в нижней части этого сообщения.
upd01: Спасибо за @glennjackman.Его попытка обнаружила, что это поведение не реплицируется в других системах.
Супер сжатый вопрос
BASH:
echo 'hi' # hi
Рубин:
system("echo 'hi'") # 'hi'
Зачем в Ruby добавлять кавычки?
Краткий вопрос:
BASH:
$ echo 'echo 20180609_Saturday/20180609.sh' > 20180609_Saturday/20180609.sh
20180609_Saturday / 20180609.sh:
echo 20180609_Saturday/20180609.sh
Bash в Ruby:
system("echo 'echo #{file_path}' > #{file_path}")
20180609_Saturday / 20180609.sh:
'echo 20180609_Saturday/20180609.sh'
Почему в выводе запроса Ruby в Ruby появляются кавычки?
Длинное описание:
Одна из моих ручных процедур заключалась в добавлении строки во вновь созданный bash-скрипт, чтобы проверить, «запускается ли он, когда я его вызываю?»
$ echo 'echo 20180609_Saturday/20180609.sh' > 20180609_Saturday/20180609.sh
и эта команда create добавляет эту строку в файл 20180609_Saturday / 20180609.sh .
echo 20180609_Saturday/20180609.sh
Я принял решение добавить эту строку в мой скрипт на Ruby
system("echo 'echo #{file_path}' > #{file_path}")
и в 20180609_Saturday / 20180609.sh У меня есть строка с кавычками:
'echo 20180609_Saturday/20180609.sh'
То же самое с различными вариантами системы и обратными кавычками:
# Second variand
`echo 'echo #{file_path}' > #{file_path}"`
# Third variand
system("echo \"echo #{file_path}\" > #{file_path}")
У меня все еще есть эти цитаты в моем недавно созданном файле.Почему это происходит?
UPD: Это поведение зависит от платформы.
Windows 8.1
$ ruby -e "system(\"echo 'hi'\")" ; ruby --version
Вывод
'hi'
ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
Ubuntu 16.04:
$ ruby -e "system(\"echo 'hi'\")" ; ruby --version
Вывод:
hi
ruby 2.3.1p112 (2016-04-26 revision 54768) [i686-linux]