Передайте несколько args из bash в python
у меня есть короткий встроенный скрипт python, который я вызываю из сценария bash, и я хочу, чтобы он обрабатывал переменную с несколькими словами (которая происходит от $*). Я ожидал, что это просто сработает:
#!/bin/bash
arg="A B C"
python -c "print '"$arg"'"
но это не так:
File "<string>", line 1
print 'A
^
SyntaxError: EOL while scanning string literal
почему?
2 ответов
Я хотел бы объяснить, почему ваш код не работает.
что вы хотели сделать это:
arg="A B C"
python -c "print '""$arg""'"
выход:
A B C
проблема вашего кода в том, что python -c "print '"$arg"'" анализируется как python -c "print '"A B C"'" оболочкой. Смотри:
arg="A B C"
python -c "print '"A B C"'"
#__________________^^^^^____
выход:
File "<string>", line 1
print 'A
SyntaxError: EOL while scanning string literal
здесь вы получаете синтаксическую ошибку, потому что пробелы предотвращают конкатенацию, поэтому следующее B и C"'" интерпретируются как две разные строки, которые не часть строки передается как команда интерпретатору python (который принимает только строку, следующую за -c как команду).
для лучшего понимания:
arg="ABC"
python -c "print '"$arg"'"
выход:
ABC
сценарий BASH неверен.
#!/bin/bash
arg="A B C"
python -c "print '$arg'"
и вывода
$ sh test.sh
A B C
обратите внимание, что для объединения двух строковых переменных вам не нужно ставить их вне строковых констант