Вопрос:
Я пытаюсь привести пример:
python -c «import sys; print sys.argv[1]» «testntest»
Выход:
testntest
Но я хочу следовать
test test
Обновление 1 #
Как предложил @devnull, можно решить проблему, если пользователь сам передает с помощью $, но как насчет того, как python должен позаботиться об этом?
Я пробовал:
python -c «import sys; print ‘$’ + sys.argv[1]» ‘testntest’
но вывод:
$testntest Лучший ответ:
Как упоминалось в deed02392, оболочка посылает символы буквально, поэтому python “ускоряет” обратную косую черту внутри. Чтобы понять, что я имею в виду, попробуйте
python -c «import sys; print repr(sys.argv[1])» «testntest» ‘test\ntest’
Чтобы обойти это, выполните:
python -c «import sys; print sys.argv[1].decode(‘string_escape’)» «testntest» test test Ответ №1
Скажите оболочке передать то, что вы хотите видеть:
python -c «import sys; print sys.argv[1]» $’testntest’
Это создаст:
test test
Синтаксис $’string’ называется ANSI-C Quoting.
Другим способом было бы рассказать оболочке интерпретировать исходный вывод:
python -c «import sys; print sys.argv[1]» ‘testntest’ | xargs -0 echo -en
Это также даст:
test test Ответ №2
Ваша оболочка отправляет python script двум буквальным символам и n.
Поскольку вы находитесь на bash, я верю, что если вы просто нажмете фактический ключ возврата после «test, он обнаружит, что вы все еще вводите аргумент, и вы можете продолжить с другим test», а затем передать это питон.