Передайте несколько 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
обратите внимание, что для объединения двух строковых переменных вам не нужно ставить их вне строковых констант