我有以下代码:
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)
因此它显然在空间上分裂.即使它逃脱了.
你在错误的地方逃跑了.试试这个例子:
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)