How do I execute a shell command from Ipython/Jupyter notebook passing the value of a python string variable as a string in the bash argument like in this example:
sp_name = 'littleGuy' #the variable
sp_details = !az ad app list --filter "DisplayName eq '$sp_name'" #the shell command
I've tried using $sp_name alone, ${sp_name}, {sp_name} etc as outlined in this related question, but none have worked.
The kicker here is the variable name needs to be quoted as a string in the shell command.
EDIT1:
@manu190466. I was judging from the string output that your solution worked. It appears for some reason it does not in practice. I wonder if az ad app list URL encodes the query or something...?
Thoughts?
解决方案
The main problem you encounters seems to come from the quotes needed in your string.
You can keep the quotes in your string by using a format instruction and a raw string.
Use a 'r' before the whole string to indicate it is to be read as raw string, ie: special caracters have to not be interpreted. A raw string is not strictly required in your case because the string constructor of python is able to keep single quotes in a double quotes declaration but I think it's a good habit to use raw string declarators when there are non alphanumerics in it.
There are at least two way to format strings :
Older method herited from ancient langages with % symbols:
sp_name = 'littleGuy' #the variable
sp_query = r"DisplayName eq '%s'"%(sp_name)
sp_details = !az ad app list --filter {sp_query}
Newer method with {} symbols and the format() method :
sp_name = 'littleGuy' #the variable
sp_query = r"DisplayName eq '{}'".format(sp_name)
sp_details = !az ad app list --filter {sp_query}