将变量从 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
我有以下 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