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

所以它显然在空间上分裂。虽然逃过了一劫。

4

1 回答 1

7

你在错误的地方逃跑。试试这个例子:

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

它应该可以正常工作。这是一个完整的示例,包括您在评论中提到的“人民舞台”:

$ 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 回答