如何阅读 bash osx 版本的"variable with backslash from stdin "



当最终目标是更改后斜线以向前斜杠上时,关于后斜线被吞噬的另一个问题。在Stackoverflow中有几篇有关此信息的文章。大多数建议使用

"read -r"

,在玩了一段时间之后,我被困了。我不确定这是我正在遇到的OSX问题还是bash问题。

但是,在我的Mac Bash中使用以下功能

slashme () 
{ 
  read -r varname;
  echo "$varname";
  echo "$1"; 
  x="$(echo "$1" | sed 's.\./.g')"; 
  echo "$x"; 
}

和以下输入

slashme "\my\precious"

> myprecious
> 
> /my/precious

我期望的是:

\my\precious
//my//precious

那么,我缺少什么魔术开关?我在跑步gnu bash 3.2.57(1(-Release(x86_64-apple-darwin-15(

\表示双引号的字符串中的字面反斜线。使用单语言:

slashme '\my\precious'

如果您使用的是bash,甚至不需要sed,bash可以单独进行字符串替换:

例如:

$ slashme() { 
  x=${1//\//}
  echo "$x"; 
}
$ slashme '\my\precious'
//my//precious

必须引用字符串以防止后斜切的重点是专门处理的。

如果您不想添加报价,则可以使用read并在运行函数后输入字符串:

$ slashme() { 
    read -r x
    echo "${x//\//}"
}
$ slashme 
\my\precious
//my//precious

to 补充通过解决OP相关的愿望而不必在命令行上输入引号

  • 正如Ikkachu指出的那样,无法正确引用参数,因为 shell解释了参数 它们通过到目标命令。

  • 您可以通过定义插入引号的 pairs pairs readline宏来简化必要的引号

  • 您可以

  • - 见下文。

将以下定义添加到您的~/.inputrc文件:

# Insert paired quotes and place the cursor between them.
# e is ESC
# e[D moves the cursor left
"e"": """e[D"
"e'": "''e[D"   

下次打开外壳时,您将能够键入 esc ' ecc " " 插入一对单语/双引号,并在它们之间放置光标。

请注意,您 first esc 然后 quote carten。

但是,可以将终端应用程序配置为使用 alt ( option (键,该键可以同时使用的更快方法按下宏触发器:

  • alt '插入配对单引号
  • alt " 插入配对双引号

在MacOS上,打开Terminal.app的首选项,在Profiles选项卡上选择感兴趣的配置文件,单击Keyboard锚,然后选择Use Option as Meta key;但是,请注意,这会禁用通常的,系统范围的选项基于生产角色变化的MACOS键盘快捷键。

当然,您可以自由选择自己的密钥序列/键盘触发器。请参阅man bashREADLINE

最新更新