Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash变量展开_Bash_Variable Expansion - Fatal编程技术网

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的语法让我心痛。哇,这让我的大脑受伤了。我的自动取款机时间不够,但我会等会儿再弄清楚,现在就用伊格纳西奥的。谢谢,哇,这让我的大脑受伤了。我的自动取款机时间不够,但我会等会儿再弄清楚,现在就用伊格纳西奥的。谢谢