当参数来自数组时,Bash脚本在参数中带有空格

Mat*_*ows 1 arrays bash

我有以下代码:

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

它给了我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
Run Code Online (Sandbox Code Playgroud)

因此它显然在空间上分裂.即使它逃脱了.

Car*_*rum 7

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

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

它应该工作正常.这是一个完整的例子,包括你在评论中提到的"人民舞台":

$ 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
Run Code Online (Sandbox Code Playgroud)