当最终目标是更改后斜线以向前斜杠上时,关于后斜线被吞噬的另一个问题。在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 bash
,READLINE
。