首页 > 解决方案 > sed 命令不适用于 open 命令

问题描述

我使用sed替换~字符串中的字符,然后在macOS上打开此字符串显示的路径的文件夹。

#!/bin/bash
string="~/example"
echo $string | sed -r 's/~/\/JKFolder\/demo/'
open $string | sed -r 's/~/\/JKFolder\/demo/'

Echo可以打印正确的路径/JKFolder/demo/,但是open不能,好像是运行字符串的第一部分,和open $string. Sed在此命令中不起作用。谢谢你。

标签: bashmacosshellsed

解决方案


当您省略时echostring变量不会传递给sed,因此它不起作用。

这会起作用:

open $(sed 's/~/\/JKFolder\/demo/' <<< "$string")
open $(echo "$string" | sed 's/~/\/JKFolder\/demo/')
open $(echo "$string" | sed 's,~,/JKFolder/demo,')

但是,在这种情况下你并不需要sed,你可以使用

open "${string/\~/\/JKFolder\/demo}"

请参阅此在线演示

"${string/\~/\/JKFolder\/demo}"是变量扩展的示例,其中第一次出现的~字符被替换为/JKFolder/demo字符串。


推荐阅读