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 }
在这里阅读更多。