Bash变量展开
我有一个由目录组成的字符串,每个目录后面都有一个空格Bash变量展开,bash,variable-expansion,Bash,Variable Expansion,我有一个由目录组成的字符串,每个目录后面都有一个空格 dirs="/home /home/a /home/b /home/a/b/c" 以下代码删除字符串中的最后一个目录 dirs=${dirs% * } 这在所有情况下都有效,除非字符串中只有一个目录,否则它不会删除它,因为它前面没有空格。 我相信有一个简单的方法可以解决这个问题,但我被卡住了。 如果可能的话,我更喜欢不带if语句的单行方法 谢谢 或者,你知道,一直把它作为一个数组 $ dirs=(/home /home/a /home/b
dirs="/home /home/a /home/b /home/a/b/c"
以下代码删除字符串中的最后一个目录
dirs=${dirs% * }
这在所有情况下都有效,除非字符串中只有一个目录,否则它不会删除它,因为它前面没有空格。我相信有一个简单的方法可以解决这个问题,但我被卡住了。
如果可能的话,我更喜欢不带if语句的单行方法 谢谢 或者,你知道,一直把它作为一个数组
$ dirs=(/home /home/a /home/b /home/a/b/c)
$ dirs=("${dirs[@]::$((${#dirs[@]}-1))}")
$ echo "${dirs[@]}"
/home /home/a /home/b
或者,你知道,一直把它作为一个数组
$ dirs=(/home /home/a /home/b /home/a/b/c)
$ dirs=("${dirs[@]::$((${#dirs[@]}-1))}")
$ echo "${dirs[@]}"
/home /home/a /home/b
我相信有人会提供更好的服务,但是
case "$dirs" in (*" "*) dirs="${dirs% *}" ;; (*) dirs="" ;; esac
我相信有人会提供更好的服务,但是
case "$dirs" in (*" "*) dirs="${dirs% *}" ;; (*) dirs="" ;; esac
首先,删除结尾处的所有非空格;然后,删除所有尾随空格:
dirs="/home /home/a /home/b /home/a/b/c"
dirs="${dirs%"${dirs##*[[:space:]]}"}" && dirs="${dirs%"${dirs##*[![:space:]]}"}"
echo "$dirs"
首先,删除结尾处的所有非空格;然后,删除所有尾随空格:
dirs="/home /home/a /home/b /home/a/b/c"
dirs="${dirs%"${dirs##*[[:space:]]}"}" && dirs="${dirs%"${dirs##*[![:space:]]}"}"
echo "$dirs"
很酷,但是弄清楚到底发生了什么有点困难。告诉我,如果我是对的。。。。我不知道我其余的评论发生了什么。不管怎样,#dirs[@]将我的字符串转换为一个单词数组,-1将其缩短一个?
${#dirs[@]}
提供数组的长度<代码>${dirs[@]::}对数组进行切片。所以,它将数组中的最后一个元素切掉。啊,谢谢。我来自一个c++,#),linux的语法让我很头疼。很酷,但弄清楚到底发生了什么有点困难。告诉我,如果我是对的。。。。我不知道我其余的评论发生了什么。不管怎样,#dirs[@]将我的字符串转换为一个单词数组,-1将其缩短一个?${#dirs[@]}
提供数组的长度<代码>${dirs[@]::}对数组进行切片。所以,它将数组中的最后一个元素切掉。啊,谢谢。我来自一个c(++,#),linux的语法让我心痛。哇,这让我的大脑受伤了。我的自动取款机时间不够,但我会等会儿再弄清楚,现在就用伊格纳西奥的。谢谢,哇,这让我的大脑受伤了。我的自动取款机时间不够,但我会等会儿再弄清楚,现在就用伊格纳西奥的。谢谢