我的python程序program.py
打印带空格的文本,而我的C程序a.out
只期望一个命令行参数。为什么这两种方法之间存在不同的行为...即为什么方法1工作而不是方法2?
方法1:
# program.py
print("Hello world")
终端:
> ./a.out "$(python program.py)"
// Program successfully run
方法2:
# program.py
print("\"Hello world \"")
终端:
> ./a.out $(python program.py)
// Error- only one command line argument expected
答案 0 :(得分:0)
方法1:
./a.out "$(python program.py)"
./ a.out将使用“$(python program.py)”作为字符串
echo "$(python program.py)"
prints "$(python program.py)"
方法2:
./a.out $(python program.py)
./ a.out将使用$(python program.py)的结果作为参数。
echo $(python program.py)
将运行程序,打印的内容将用作参数。
因为你打印了Hello world
,所以它将使用Hello作为第一个参数,将world作为第二个参数。
它会产生类似的东西
./a.out Hello World
答案 1 :(得分:0)
显然,每当你使用$ something时,如果你有空格,它将总是分成几个参数。 只要看看1美元是如何运作的,它就是同样的行为。 然后你的$(命令)将工作相同。 这就是为什么你必须在它周围加上引号。
我试过了:
ls $(echo '"Hello World!"')
它与第二种方法具有相同的行为。
而且:
ls "$(echo 'Hello World!')"
与第一种方法相同。