【发布时间】:2017-01-19 23:25:00
【问题描述】:
在 Bash,v.4.3.11(1) 我有这个示例代码:
#!/bin/bash
dir=("/home/user/Documents/" "/home/user/Music/" "/home/user/Videos/" \
"/home/user/Photos/")
baseDir="/home/user/"
for i in "${!dir[@]}"
do
niceName=${dir[$i]#"$baseDir"} # removes baseDir from front part
printf "%s\n" "${niceName%"/"}" # also removes trailing slash from end
done
有没有办法将两个命令合二为一,并且在 for 循环中只有 printf? (最好不要诉诸 awk 或 sed,但如果不可避免,也可以)。
我尝试了各种组合,但最终出现“错误替换”错误。
例如,printf "%s\n" "${niceName=${dir[$i]#"$baseDir"%"/"}" 不适合我。
【问题讨论】:
-
您有什么理由使用
for i in "${!dir[@]}"和${dir[$i]}而不是for i in "${dir[@]}"和只是$i? -
数组定义中不需要反斜杠;换行符和空格一样可以分隔数组元素。
-
Benjamin W.:需要使索引易于获得,但在一般情况下你是对的。 Chepner:有用的观察,谢谢!