Когда вы выполните строку /tmp/testme ${x}
, bash расширит содержимое x
и в конечном итоге выполнит /tmp/testme i am a book
.Следовательно, sys.argv
станет ['/tmp/testme', 'i', 'am', 'a', 'book']
.
. Для достижения желаемого поведения следует указывать ${x}
, например "${x}"
.Затем bash выполнит /tmp/testme 'i am a book'
.
Вот пример со сценарием bash.При set -x
bash будет печатать команды и их аргументы по мере их выполнения после оценки всех переменных.
$ cat testme
#!/usr/bin/env python3
import sys
print(sys.argv)
$ cat exampleBashScript.sh
#!/usr/bin/env bash
set -x
x="i am a book"
./testme ${x}
./testme "${x}"
$ ./exampleBashScript.sh
+ x='i am a book'
+ ./testme i am a book
['./testme', 'i', 'am', 'a', 'book']
+ ./testme 'i am a book'
['./testme', 'i am a book']