将变量从 bash 传递给可执行文件(使用标准输入读取参数)

passing variables from bash to executable (which reads argument with stdin)

我有以下 test.cpp c++ 程序

#include <stdio.h>
#include <stdlib.h>
#include <iostream>

using namespace std;

int main()
{
    float a,b,c;
    cout<<"Give 1st number";
    cin>>a;
    cout<<"Give 2nd number:";
    cin>>b;

    c=a+b;
    cout<<"\n"<<a<<"+"<<b<<"="<<c<<endl;

return 0;
}

我想创建一个 shell 脚本 来提供输入变量。 我知道如何传递一个变量,我想知道是否有办法传递 2 个变量... 像下面的 test.sh 文件不工作

#!/bin/bash

g++ test.cpp -o testexe
chmod +x testexe

a=1
b=2

./testexe <<< $a $b

您应该按如下方式更改您的 C++ 程序和脚本:

int main(int argc, const char*argv[])
{
    float a,b,c;
    a=std::stof(argv[1]);
    b=std::stof(argv[2]);
    c=a+b;
    cout<<"\n"<<a<<"+"<<b<<"="<<c<<endl;
    return 0;
}


#!/bin/bash

g++ test.cpp -o testexe
chmod +x testexe

a=1
b=2

./testexe  $a $b

不仅要与 bash 兼容,还要与 /bin/sh 兼容——同时避免管道开销——使用 heredoc:

./testexe <<EOF
$a
$b
EOF

如果您不关心管道开销(并且仍然保持 /bin/sh 兼容性,使用 <<< 的任何答案都缺乏):

printf '%s\n' "$a" "$b" |  ./testexe

如果您不关心 /bin/sh 兼容性:

./testexe <<<"$a"$'\n'"$b"

像这样:

echo "$a $b" | ./testexe

或:

arr=("$a" "$b")
./testexe <<< "${arr[*]}"

或:

./testexe <<< "$a $b"

或:

./testexe <<< "$a"$' '"$b"

如果您希望它也适用于字符串变量(使用白色 spaces),则使用 换行符 作为两个变量之间的分隔符而不是单个 space.

例如:

echo "$a"$'\n'"$b" | ./testexe