首先,如果之前有人问过这个问题,我深表歉意,我搜索了这里和 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) )