Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 为包含单引号的命令创建别名_Linux_Bash_Shell_Command Line - Fatal编程技术网

Linux 为包含单引号的命令创建别名

Linux 为包含单引号的命令创建别名,linux,bash,shell,command-line,Linux,Bash,Shell,Command Line,我正在尝试为此命令创建别名 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'

我正在尝试为此命令创建别名

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
as中更简单地编写这篇文章

renfiles () {
  for file in ./*; do
    mv "$file" "${file// /_}"
  done
}

改用函数:

renfiles () {
  for file in ./*; do
    mv "$file" "$(echo "$file" | tr ' ' '_')"
  done
}
您可以在
bash
as中更简单地编写这篇文章

renfiles () {
  for file in ./*; do
    mv "$file" "${file// /_}"
  done
}
1) 这里有两个带引号的字符串(已标记),
$file
的扩展在任何引号之外。这意味着它将在设置别名时展开,而不是在执行别名时展开。(它也将从双引号中展开)

2) 反勾号(以及saner
$(…)
)从双引号内展开,因此在设置别名时也会展开。因此,如果在设置别名时,
$file
碰巧包含一个
*
,您将得到您所看到的内容

如果要对别名执行类似操作,请在其周围使用单引号:

alias renfiles='for file in *; do echo mv "$file" $(echo $file | tr " " "_") ; done'
(或者更好的方法是使用@chepner这样的函数。)

1) 这里有两个带引号的字符串(已标记),
$file
的扩展在任何引号之外。这意味着它将在设置别名时展开,而不是在执行别名时展开。(它也将从双引号中展开)

2) 反勾号(以及saner
$(…)
)从双引号内展开,因此在设置别名时也会展开。因此,如果在设置别名时,
$file
碰巧包含一个
*
,您将得到您所看到的内容

如果要对别名执行类似操作,请在其周围使用单引号:

alias renfiles='for file in *; do echo mv "$file" $(echo $file | tr " " "_") ; done'

(最好使用@chepner show之类的函数。)

使用函数而不是别名,您不必担心任何引用问题。是否安装了
rename
命令?这样,您就不需要编写自己的循环。使用函数而不是别名,您不必担心任何引用问题。是否安装了
rename
命令?这样就不需要编写自己的循环。