Я схожу с ума, пытаясь выяснить, как правильно передавать аргументы из сценария оболочки в python, когда речь идет о обратных галочках.
Это мое ./foo.sh
#!/bin/bash
EXEC_SCRIPT="./foo.py -c $1"
result=`${EXEC_SCRIPT}`
echo ${result}
Этомой ./foo.py
#!/usr/bin/python
import argparse
ap = argparse.ArgumentParser()
ap.add_argument('-c', required=True)
args,u = ap.parse_known_args()
args = vars(args)
print ("I GOT {}".format(args['c']))
Я делаю:
./foo.sh ABC
и получаю:
I GOT ABC
Отлично.
Но тогда яdo:
./foo.sh "Hello World"
И я получаю:
I GOT Hello
Попытка изменить скрипт bash на:
EXEC_SCRIPT="./foo.py -c \"$1\""
Производит:
I GOT "Hello
Ничего из этого не является проблемой, если я не использую обратные ссылки.Экранированные кавычки работают отлично.
Чего мне не хватает?
Что мне действительно нужно, так это чтобы скрипт python получил мой аргумент, будь то 1 слово или 2 без кавычек.
Дополнительные разъяснения: Спасибо Гордону и AK47 за то, что они сделали то же самое предложение.Похоже, причина в том, что я вставляю команду в переменную EXEC_SCRIPT.Вызов команды непосредственно внутри backticks работает.Мой настоящий сценарий более сложный и EXEC_SCRIPT
указывает на разные значения из-за разных условий.Какой хороший способ получить чистый код, который позволяет мне найти правильную команду и затем вызвать ее в конце?Использование переменной логично, как и я, но, видимо, она не работает