我想在 POSIX shell(破折号)的 case 语句中捕获变量是否为多行。
我试过这个:
q='
'
case "$q" in
*$'\n'*) echo nl;;
*) echo NO nl;;
esac
Run Code Online (Sandbox Code Playgroud)
它nl
以 zsh 形式返回,但NO nl
以破折号形式返回。
谢谢。
Zsh 上的 Arch Linux Wiki 页面有一个从 terminfo 获取按键序列的示例。
typeset -g -A key
key[Home]="${terminfo[khome]}"
key[End]="${terminfo[kend]}"
...
Run Code Online (Sandbox Code Playgroud)
但是我怎样才能得到带有修饰符的呢?具体来说是 Alt+j 和 Alt+k。
谢谢。
我正在尝试使用 POSIX sed 加入行。
使用 GNU sed(没有 --posix),这可以按预期工作:
$ sed ':a; N; s/\n//; b a' <<< $'a\nb\nc'
abc
Run Code Online (Sandbox Code Playgroud)
但是如果我使用 --posix 我没有输出。
为什么会这样,否则我该怎么做?
我的 .zshrc 中有这个:
# command completion
autoload -Uz compinit
compinit
Run Code Online (Sandbox Code Playgroud)
通常让我通过选项卡浏览命令、参数和文件。
但对于git --git-dir=<the path> --work-tree="$HOME"
(通常是别名)它仅适用于子命令(如添加和推送)和参数,不适用于文件。我希望它也能处理文件。
我尝试将其放入脚本中,如下所示:
#!/usr/bin/env sh
git --git-dir=<the path> --work-tree="$HOME" "$@"
Run Code Online (Sandbox Code Playgroud)
它适用于文件,但子命令和参数会中断。
谢谢。
在鱼壳中,当您按下Alt+l
它时,它会ls
很好地显示命令的输出。它会保留您按下之前正在编写的命令。我想在 zsh 中有这个。
这是我非常不稳定的尝试:
function myls {
awk '{len = length($0); for(i=0;i<len;i++) printf "\b"}' <<< "$LBUFFER"
zle push-input
zle accept-line
print $(ls --color=always --indicator-style=slash)
}
zle -N myls
bindkey -- '^[l' myls
Run Code Online (Sandbox Code Playgroud)
我努力清除现有命令,最终使用了 hacky\b
的。它不能在长行和多行上正常工作。
谁能做得更好?
& 和 \0 在替换替换上有什么区别吗?
$ echo a b c | sed 's/\(a\) b \(c\)/&/'
a b c
$ echo a b c | sed 's/\(a\) b \(c\)/\0/'
a b c
Run Code Online (Sandbox Code Playgroud)