[英]Create alias for command containing single quotes
我试图为此命令创建别名
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
我正在使用此命令创建别名
alias renfiles="for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done"
但是它为错误的命令创建别名:
$ which renfiles
alias renfiles='for file in *; do mv * * ; done'
我想做的是创建一个重命名文件的别名,然后使用readlink列出它们,所以下面要做一个别名:
for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done
for f in *; do readlink -f -- "$f"; done | sed -e "s/\/home\/ovh\/www/xxx.xxx.xxx.xxx/g"
改用一个函数:
renfiles () {
for file in ./*; do
mv "$file" "$(echo "$file" | tr ' ' '_')"
done
}
您可以在bash
更简单地编写为
renfiles () {
for file in ./*; do
mv "$file" "${file// /_}"
done
}
alias renfiles="for file in *; do mv "$file" `echo $file | tr ' ' '_'` ; done"
1)您在那里有两个带引号的字符串(标记为), $file
的扩展在任何引号之外。 这意味着,当,当它执行的别名设置 ,不是会扩大。 (它也会在双引号内扩展)
2)反引号(以及更清晰的$(...)
)从双引号内部展开,因此在设置别名时它们也会被展开。 因此,如果在设置别名时$file
恰好包含*
,那么您将得到的正是您所看到的。
如果要使用别名执行类似的操作,请在其周围使用单引号:
alias renfiles='for file in *; do echo mv "$file" $(echo $file | tr " " "_") ; done'
(或者更好的方法是,使用显示的@chepner之类的函数。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.