1

次のコードがあります。

entries=("Wet\ Picnic" "Arizona\ Jones" "Bikeboy")
for arg in "${entries[@]}"; do ls -lh $arg.* ; done

4つのエラーと1つの成功が得られます。3回くらい成功させたいです。

引数にスペースが含まれているという事実をどのように処理しlsますか (現在のように、明らかにそれらをエスケープしようとしました)、無駄です。

コンソール出力は現在です。

ls: Wet: No such file or directory
ls: Picnic: No such file or directory
ls: Arizona: No such file or directory
ls: Jones: No such file or directory
-rw-r--r-- 1 root root 0 Jun 27 17:55 Bikeboy.png

SO 明らかにスペースで分割されています。逃げられたのに。

4

1 に答える 1

7

あなたは間違った場所に逃げています。この例を試してください:

entries=("Wet Picnic" "Arizona Jones" "Bikeboy")
for arg in "${entries[@]}"; do ls -lh "$arg".* ; done

それはうまくいくはずです。コメントで言及した「People's Stage」を含む完全な例を次に示します。

$ ls
Arizona Jones.png   People's Stage.png  example*
Bikeboy.png         Wet Picnic.png
$ cat example 
#!/bin/bash

entries=("Wet Picnic" "Arizona Jones" "Bikeboy" "People's Stage")
for arg in "${entries[@]}"; do ls -lh "$arg".* ; done
$ ./example 
-rw-r--r--  1 carl  staff     0B Jun 27 10:00 Wet Picnic.png
-rw-r--r--  1 carl  staff     0B Jun 27 10:00 Arizona Jones.png
-rw-r--r--  1 carl  staff     0B Jun 27 10:01 Bikeboy.png
-rw-r--r--  1 carl  staff     0B Jun 27 10:11 People's Stage.png
于 2012-06-27T17:00:56.980 に答える