无法从变量开头删除空格

无法从变量开头删除空格

我正在尝试在我用来记录的另一个闪存驱动器上创建一个文件夹,其中插入媒体设备的标签和 uuid 作为其名称。我有以下代码:

LOGDEVICELABEL=FLASHDRIVENAME
MD=`lsblk -I 8 -o label,uuid -n|sed -e '/^$/ d' -e '/^$LOGDEVICELABEL.*$/ d'`
MDLOGDIR=/media/$LOGDEVICELABEL/Log/$MD
mkdir $MDLOGDIR

问题是变量的值$MD在开头有一个空格,我无法摆脱它。该空格导致 mkdir 将/media/$LOGDEVICELABEL/Log/$MD视为两个单独的参数。

我试过:

MDLOGDIR=`sed 's/ // g' <<</media/$LOGDEVICELABEL/Log/$MD` 

它仅删除 UUID 和 Label 之间的空格(这也是必要的),但不会删除/media/$LOGDEVICELABEL/Log/和之间的空格$MD

答案1

我要做的一件事是用来echo去除不需要的空白。在这种情况下,省略任何引号很重要:

LOGDEVICELABEL=FLASHDRIVENAME
MD=$(lsblk -I 8 -o label,uuid -n|sed -e '/^$/ d' -e '/^$LOGDEVICELABEL.*$/ d')
MD=$(echo $MD) # <-- This line
MDLOGDIR=/media/$LOGDEVICELABEL/Log/$MD
mkdir $MDLOGDIR

shell 调用该echo命令并向其提供一系列标记,该echo命令将打印这些标记,并用空格字符分隔。这样做的效果是 (1) 跳过前导和尾随空白,以及 (2) 将标记之间的一个或多个空白字符转换为单个空格。

在这种情况下,我使用$(...)代替反勾号版本相当于反勾号版本。一般来说,我觉得这个版本更容易阅读。它还有一个很好的好处,即它可以嵌套 ( $(...$(...))) ,而反引号版本则不能嵌套。

答案2

为什么不使用“参数扩展”之类的

MDLOGDIR=/media/$LOGDEVICELABEL/Log/${MD# }
MDLOGDIR=/media/$LOGDEVICELABEL/Log/${MD/ }

或扩展sed类似

s /^ //

相关内容