从BASH中的命令行创建变量

时间:2014-03-26 13:32:05

标签: c bash

我是bash的新用户,所以请耐心等待。 我正在尝试运行一个bash脚本,它将从命令行获取输入,然后运行一个c程序,其输出到其他c程序。 例如,在命令行我输入如下:

$ ./script.sh -flag file1 < file2

我将拥有的脚本:

./c_program -flag file1 < file2 | other_c_program

问题是,-flagfile1file2需要变量。 现在我知道对于-flag和文件这很简单 - 我可以做到

FLAG=$1
FILE1=$2
./c_program $FLAG FILE1

我的问题是:有没有办法将脚本中的变量分配给file2

编辑: 程序要求脚本被称为 $ ./script.sh -flag file1&lt; file2的

2 个答案:

答案 0 :(得分:1)

您可以完全按照它运行./c_program,它将从父脚本继承stdin。它将从父进程读取的任何位置读取。

FLAG=$1
FILE1=$2
./c_program "$FLAG" "$FILE1" | other_c_program    # `< file2' is implicit

此外,引用变量扩展是一个好主意。这样,如果$FILE1包含空格或其他棘手的字符,脚本仍然可以正常工作。

答案 1 :(得分:1)

没有简单的方法来做你要求的事情。这是因为当你运行它时:

$ ./script.sh -flag file1 < file2

解释命令的shell将打开file2进行读取并将其内容传递给script.sh。您的脚本永远不会知道文件的名称是什么,因此无法将该名称存储为变量。但是,您可以这样调用脚本:

$ ./script.sh -flag file1 file2

然后它很简单 - 你已经知道如何获得file1file2是相同的。