我正在使用带有 bash 的 archlinux。我一直在尝试创建一个新别名,但bashrc
不喜欢我的大括号。下面的命令应该计算我目录中每个的视频持续时间长度.mkv
(深度 = 3)并将其转换为小时。
alias vidlength="find . -maxdepth 3 -iname '*.mkv' -exec ffprobe -v quiet -of csv=p=0 -show_entries format=duration {} \; | paste -sd+ -| bc | awk '{print(($1/60)/60)}'"
当我运行 source$ source ~/.bashrc
之后
$ vidlength
,我得到这个错误:
awk: cmd. line:1: {print((/60)/60)}
awk: cmd. line:1: ^ syntax error
Bashrc 和类似的东西对我来说很新,我在谷歌上找不到任何类似的问题。非常感谢任何帮助。:)
这个问题与你的“大括号”无关。
您曾经
"
引用整个别名值,因此在$1
您打算在 awk 中表示“字段 1”的字符串中,在别名定义时将其扩展为 shell 参数 1,这是一个空值;结果,这个表达式((/60)/60)
没有意义——你试图将一些东西除以 60,但没有任何东西。您可以使用反斜杠引用$
,或者您可以使用 awk 字段引用仍然可以在其中使用空格的技巧,$ 1
或者$ NF
当 shell 参数不使用时。或者,使用 shell 函数(接受完整的 shell 语法)而不是别名(要求将所有内容打包到单个字符串中):
此外,您可以通过让 awk 进行加法而不是单独的 bc 来简化此操作,并且您不需要所有括号: