是否有一种方法可以执行多个shell变量展开/参数替换?
我的脚本中有一行代码可以在zsh中使用,但不能在bash中使用:是否有一种方法可以执行多个shell变量展开/参数替换?,shell,unix,Shell,Unix,我的脚本中有一行代码可以在zsh中使用,但不能在bash中使用: SHORTDIR=${${{PWD###*/}/./././.\u dot}/:/./\u colon} 这基本上是basename$PWD | sed-e's/\./0/g'-e's/:/1/g'的简短/高效版本 将变量扩展串在一起的语法是什么 我希望有比这更好的方法 SHORTDIR=${PWD##*/} SHORTDIR=${SHORTDIR//./_dot_} SHORTDIR=${SHORTDIR//:/_colon_
SHORTDIR=${${{PWD###*/}/./././.\u dot}/:/./\u colon}
这基本上是basename$PWD | sed-e's/\./0/g'-e's/:/1/g'
的简短/高效版本
将变量扩展串在一起的语法是什么 我希望有比这更好的方法
SHORTDIR=${PWD##*/}
SHORTDIR=${SHORTDIR//./_dot_}
SHORTDIR=${SHORTDIR//:/_colon_}
但这是我坚持的
根据@perreal链接的问题的答案,bash基本上不允许扩展变量本身作为“参数”,这就是它失败的原因 遗憾的是,替换的第一部分必须是参数名。另一种sed版本是:
echo $PWD | sed -e 's!.*/!!' -e 'y/.:/01/'
简单地说,许多人不知道在一行中可以完成多个作业。例如:
$ a=1234 a=${a:0:3} a=${a/1}
或
可能的副本有用的知道。
a=${a/1}
是否删除1
字符?根据@StevenLu,我的印象是需要一个尾随斜杠-是的,没错。不需要尾部斜杠,因为“1”将被替换为零。医生没有提到这一点;但是,bash(1)手册页显示如果字符串为null,则删除模式的匹配项,并且可以省略/以下模式。
SHORTDIR=${PWD##*/} SHORTDIR=${SHORTDIR//./_dot_} SHORTDIR=${SHORTDIR//:/_colon_}