在bash中定义一个函数式的macros

是否有可能在bash中定义macros函数,所以当我写:

F(sth); 

bash运行这个:

 echo "sth" > a.txt; 

任意语法不能做任何事情。 圆括号是对分析器有特殊意义的元字符 ,所以你不可以把它们当作有效的名字来使用。 扩展shell的最好方法是定义函数。

这将是一个基本的echo包装,总是写入同一个文件:

 f() { echo "$@" } >a.txt 

这大致相同,但额外处理标准输入 – 牺牲echo's -e-n选项:

 f() { [[ ${1+_} || ! -t 0 ]] && printf '%s\n' "${*-$(</dev/fd/0)}" } >a.txt 

这可以被称为

 f arg1 arg2... 

要么

 f <file 

函数传递参数的方式与其他命令相同。

第二个类似于echo的包装器首先测试一个设置的第一个参数 ,或者来自非tty的stdin,并且使用位置参数(如果设置)或stdin有条件地调用printf。 测试表达式避免了零参数和不从文件重定向的情况,在这种情况下,Bash会尝试扩展终端的输出,挂起shell。

 F () { echo "$1" > a.txt } 

你打电话时不要使用圆括号。 这就是你如何称呼它:

 F "text to save" 

是的,只有你应该用F sth来称呼它:

 F() { echo "$1" > a.txt } 

在这里阅读更多。