7
A
回答
14
任意语法不能做任何事情。圆括号是元字符,它们对解析器有特殊的含义,因此您无法使用它们作为有效的名称。扩展shell的最好方法是定义函数。
这将是一个基本echo
包装,始终写入同一个文件:
f() {
echo "[email protected]"
} >a.txt
这达到同样的效果,但还处理标准输入 - 牺牲echo's
-e
和-n
选项:
f() {
[[ ${1+_} || ! -t 0 ]] && printf '%s\n' "${*-$(</dev/fd/0)}"
} >a.txt
其可称为
f arg1 arg2...
个
或
f <file
功能都在相同的方式与任何其它命令传递的参数。
第二个类似echo的包装首先测试set first argument或来自非tty的stdin,并使用定位参数(如果设置)或stdin有条件地调用printf。测试表达式避免了零参数和不从文件重定向的情况,在这种情况下,Bash会尝试扩展终端的输出,挂起shell。
4
F() {
echo "$1" > a.txt
}
你不你打电话时不用括号。这是你如何称呼它:
F "text to save"
3
相关问题
- 1. 定义一个宏的函数定义
- 2. 定义函数宏
- 3. “Comment”out宏函数定义
- 4. 函数式宏定义
- 5. 在宏中定义函数(在C中)
- 6. 在bash中定义一个没有shell脚本的shell函数?
- 7. 在宏中定义一个函数:不能使用限定名作为参数
- 8. 定义一个宏用C
- 9. 确定定义bash函数的位置
- 10. 如何在一个只能定义一次的函数或宏函数中创建一个变量?
- 11. bash可以显示一个函数的定义吗?
- 12. 函数名称的预定义宏__func__
- 13. 带宏的动态函数定义
- 14. 转换一个行函数宏在C
- 15. 宏定义宏
- 16. 在SignalR上定义一个jquery函数
- 17. 在条件内定义一个函数
- 18. 在Lua中定义一个函数?
- 19. 在python中定义一个函数
- 20. 在宏内部或外部定义一个函数(高中断)C
- 21. 数组宏定义
- 22. 如何创建一个宏来定义clojure中的两个函数
- 23. 在C++中为特定函数定义宏
- 24. 定时bash函数
- 25. 如何定义一个常数函数
- 26. 定义一个函数作为参数
- 27. 定义一个常数函数调用
- 28. 为什么#定义一个空的宏?
- 29. __NSX_PASTE__定义一个宏需要什么?
- 30. C宏一次定义多个变量
+1,很好的答案。你会介意更详细地解释为什么你使用更复杂(但更好)的构造来输出参数吗? – Kaii 2012-04-17 07:31:56
它只允许来自stdin或参数的输入。测试表达式可以防止出现零参数和stdin来自终端的情况,在这种情况下,因为进程自己的tty正在读取和阻止,所以shell将不得不被终止。如果通过,那么位置参数将被放大(如果已设置),或者扩展将从函数的输入中读取。使用'cat'可以实现稍微更便携但更慢的解决方案 - 这需要一个具有真正的/ dev/fd/*的系统。自从我之前的回答与其他回答相同以来,我只是发布了这个技巧。 :) – ormaaj 2012-04-17 08:07:59
也,它确实允许*多个参数*就像'echo'一样。你的函数使用'f一二三',而其他函数只能用'f'一二三''工作。考虑到没有qotes的输入,其他解决方案只考虑第一个词(这里:“one”)。 – Kaii 2012-04-17 08:11:00