如果我有一个名为“prog”的程序只需要一个参数,我可以写:
./prog <<< 1
但是如果我有一个程序需要 2 个参数,为什么这不起作用:
./prog <<< 2 3
我在谷歌上找不到答案。这怎么可能呢?
注意:我需要这个来写.sh
答案1
该<<<
操作符在手册页中有说明bash(1)
。它用于“here strings”(概念上类似于 shell 语法中已经存在多年的“here documents”)。
语法:
command <<< word
...扩展word
并将其传递给command
标准输入。
它相当于:
echo word | command
如果您确实想将 1 和 2 都作为标准输入(而不是参数/参数)传递,您可以这样做:
./command <<< "1 2"
或者
./command <<< 1\ 2
基本上,您需要转义 1 和 2 之间的空格,以防止将输入分成两个单词。
答案2
我找不到对 bash 的“<<<”运算符的任何引用,但它似乎立即获取运算符后的文本并将其解析为第一个变量。
如果您正在编写 BASH 脚本,则无需这样做。您只需对每个变量使用 $X,然后将变量添加到脚本中即可。例如:
/bin/bash
echo "Usage: $0 variable1 variable2"
echo "Variable 1 value is $1"
echo "Variable 2 value is $2"
因此,如果你将上述文件保存为“test.sh”,则使其可执行,然后运行它./test.sh hello world
它将输出用法:./test.sh variable1 variable2 变量 1 的值为 hello 变量 2 的值为 hello world
$0 = 脚本的名称。如果您想要传递 2 个带空格的参数,例如“Hello World”和“This is a test”,则可以将其调用为 ./test.sh "Hello World" "his is a test"
答案3
这就是我解决问题的方法:
#/bin/bash
(echo 1 2) | ./prog