来自管道命令的数组失败

来自管道命令的数组失败

首先,如果之前有人问过这个问题,我深表歉意,我搜索了这里和 StackOverflow,尝试了手册页,但我仍然一片空白。

我正在尝试编写一个脚本,该脚本将在启动时自动安装服务器的存档驱动器(出于安全原因,系统不会自动安装附加到计算机的任何内容)。

到目前为止我所拥有的是这样的:

#! /bin/bash
archives=( `ls /dev/disk/by-label/ | sed -rn 's/.*archive\\x20(.*)/\1/Ip'|sort -d`)

echo "Output of the Commands piped to array:"
for arcNum in ${archives[@]}; do
    echo "mounting Archive: $arcNum"
done

echo "Desired Output of Command:"
ls /dev/disk/by-label/ | sed -rn 's/.*archive\\x20(.*)/\1/Ip'|sort -d

运行它会在终端中产生以下结果:

user@machine:~$ autoLoadArchives
Output of the Commands piped to array:
Desired Output of Command:
2
4
6
user@machine:~$

如果我从 sed 中删除 -n 标志和 p 命令:

ls /dev/disk/by-label/ | sed -r 's/.*archive\\x20(.*)/\1/I'|sort -d

我最终得到了数组中的原始未过滤列表,但在命令行版本中得到了正确替换和排序的未过滤列表:

user@machine:~$ autoLoadArchives
output of the Commands piped to array:
mounting Archive: Archive\x206
mounting Archive: MY-USB
mounting Archive: PFI\x20ARCHIVE\x202
mounting Archive: PFI\x20Archive\x204
Desired Output of Command:
2
4
6
MY-USB
user@machine:~$ 

输出来自$ ls /dev/disks/by-label/

user@machine:~$ ls /dev/disk/by-label/
Archive\x206  MY-USB  PFI\x20ARCHIVE\x202  PFI\x20Archive\x204
user@machine:~$ 

我有一种可怕的感觉,我的问题可能是一些愚蠢的小菜鸟,但老实说,我对这里发生的事情一无所知。

答案1

反引号解释一些特殊字符(例如反斜杠)。代替使用$( ... )

archives=( $(ls /dev/disk/by-label/ \
             | sed -rn 's/.*archive\\x20(.*)/\1/Ip' \
             | sort -d) )

相关内容