通常,我发现使用bash命令与其他(即复合命令)或变量相当混淆。没有任何事情按我期望的方式工作。命令期望各种各样的输入类型(例如echo在查找时需要一个字符串),并且有许多方法可以将信息从一个命令传输到另一个命令(例如xargs,piping,here-strings(<<<
)和命令扩展($(command)
) )。当彼此使用命令时,我不确定将信息从一个命令传递到另一个命令的正确方式,因此它可以像我期望的那样工作。在bash命令中的输入类型之间进行转换
一些例子:如果我做echo $VAR
,它期望变量是一个字符串。如果我做grep pattern $VAR
,它会期望我的变量是一个路径名,而不是一个字符串。为了让grep把它看作一个字符串,我必须做echo $VAR | grep pattern
。所以,为了获得相同的期望阅读,我必须针对不同的命令以不同的方式输入我的信息。
另一个例子:我最近想在我的$PATH
中搜索命令。我花了很长时间的试验和错误,发现我可以使用ls $(sed 's/:/ /g' <<< "$PATH") | grep searchstring
这样做。由于我无法将参数传入ls
,看起来grep
可以从stdin读取参数,而ls
不能?
具体而言,一些问题我想回答是:
- 我怎么知道是什么命令期待什么类型的输入?
- 命令(或短语)之间传递信息的不同方法之间的有效和语义差异是什么?
- 重定向的输入和输出可以在这里有用吗?
- 怎样类型的输入之间切换(例如,如果它是期待一个 文件名,但我想给它,而不是字符串)
- 什么是我的复合命令将被解析的规则?
- 奖励:在上述方法的哪里和怎样可以使用bash扩展等(例如,我可以在管道信息中bash扩展)?
所以你说这个问题的范围太大了?根据你的建议,我只是花了一点时间阅读,我不确定是如此......到目前为止,我认为我的大部分难题都可以通过分解不同的函数链接方法来解决。 .. – ari 2013-03-05 06:20:07