mim*_*mmi 0 bash shell command pipe
我有一个单行命令,让我们说
grep needle haystack.file
Run Code Online (Sandbox Code Playgroud)
如果我想使用 pwd 命令用当前工作目录替换“needle”怎么办。现在可能可以使用管道,但我需要针部分来显示工作目录和命令的其余部分是相同的。
所以最好是这样的:
grep (pwd) haystack.file
Run Code Online (Sandbox Code Playgroud)
执行时实际上会运行以下命令:
grep /var/www/html/ haystack.file
Run Code Online (Sandbox Code Playgroud)
我做了一些搜索,发现了很多带有管道的例子,但它不能应用于我的场景,因为第一部分 (grep) 和第二部分 (haystack.file) 在应用程序中是固定的。
使用$PWD变量,始终设置:
grep "$PWD" haystack.file
Run Code Online (Sandbox Code Playgroud)
您还可以使用命令替换:
grep "$(pwd)" haystack.file
Run Code Online (Sandbox Code Playgroud)
注意引号的重要性。做吧!否则可能会发生奇怪的事情。
您可以使用命令替换
测试
$ echo $(pwd) > test
$ grep $(pwd) test
/home/xxx/yyy
Run Code Online (Sandbox Code Playgroud)
或者
$ grep `pwd` test
/home/xxx/yyy
Run Code Online (Sandbox Code Playgroud)
安全
始终建议引用命令替换以处理pwd命令输出中的空格
测试
$ pwd
/home/xxx/yyy/hello world
$(pwd) > test
$ grep $(pwd) test #without quoting
grep: world: No such file or directory
test:/home/xxx/yyy/hello world
$ grep "$(pwd)" test #with quoting
/home/xxx/yyy/hello world
Run Code Online (Sandbox Code Playgroud)