我正在阅读此链接上的指南 http://mywiki.wooledge.org/BashFAQ/030 给出了一些示例 我试图理解它们 一个示例代码说
# Bash
# Replace all spaces with underscores
for f in *\ *; do mv -- "$f" "${f// /_}"; done
到目前为止,我所知道的是在搜索和替换示例或在上面示例中的 shell 脚本中使用反斜杠来表示特殊字符,例如 ~ 或 # 等空格,他们
使用 ${f// /_}
了正斜杠,我不清楚这是允许吗?
在同一页面上的另一个示例中,他们给出了一个删除空格并将其替换为下划线的示例
find . -depth -name "* *" -exec bash -c 'dir=${1%/*} base=${1##*/};
mv "$1" "$dir/${base// /_}"' _ {} \;
在上面的例子中,我不清楚下面的
1) dir=${1%/*}
2) base=${1##*/}
3),当它mv "$1"
在上面的语句中说明 $1 的含义时,
4) 最后 find 命令正在关闭,-exec <something> _ {} \;
现在下划线 _ 的用途是什么,卷曲大括号 {} 和一个反斜杠,后跟一个冒号 \;?
在第三个例子中,他们说
# tolower - convert file names to lower case
# POSIX
for file in "$@"do
[ -f "$file" ] || continue # ignore non-existing names
newname=$(echo "$file" | tr '[:upper:]' '[:lower:]') # lower case
[ "$file" = "$newname" ] && continue # nothing to do
[ -f "$newname" ] && continue # don't overwrite existing files
mv -- "$file" "$newname"done
我不清楚以下几行
5)[ -f "$file" ] || continue # ignore non-existing names
我不清楚 [ ] 如果 $file 存在则测试条件,那么 OR 条件有什么用 || 这里和继续声明
6)[ -f "$newname" ] && continue # don't overwrite existing files
这里的疑问与第 5 点相同