パイプコマンドの配列失敗

パイプコマンドの配列失敗

まず、この質問が以前に提起された場合はお詫び申し上げます。ここと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) )

おすすめ記事