Передайте несколько 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

обратите внимание, что для объединения двух строковых переменных вам не нужно ставить их вне строковых констант