我想在终端(OSX)中为此命令创建一个别名:
cal -y | awk -v month="`date +%m`" -v day="`date +%e` " '{m=int((NR-3)/8)*3+1; for (i=0;i<3;i++) {t[i]=substr($0,1+i*22,20) " "; if (m+i==month) sub(day,"\033[0;31m&\033[0m",t[i]);} print t[0],t[1],t[2];}'
当我运行它时,该命令工作正常,但是当我尝试为它创建别名时,它给了我这个错误:
语法错误接近意外令牌`('
我创建别名的代码是:
alias caly='cal -y | awk -v month="`date +%m`" -v day="`date +%e` " '{m=int((NR-3)/8)*3+1; for (i=0;i<3;i++) {t[i]=substr($0,1+i*22,20) " "; if (m+i==month) sub(day,"\033[0;31m&\033[0m",t[i]);} print t[0],t[1],t[2];}''
我也尝试使用转义序列,因为错误可能是在我将单引号放在整行之前命令中已经有单引号的事实。这是我试过的第二段代码(它给了我同样的错误):
alias caly='cal -y | awk -v month="`date +%m`" -v day="`date +%e` " \'{m=int((NR-3)/8)*3+1; for (i=0;i<3;i++) {t[i]=substr($0,1+i*22,20) " "; if (m+i==month) sub(day,"\033[0;31m&\033[0m",t[i]);} print t[0],t[1],t[2];}\''
有谁知道如何修复此错误?我对终端很新,所以任何建议都表示赞赏!
答案 0 :(得分:0)
错误是因为您传递给alias
的命令字符串(由单引号括起)本身也包含单引号。
我怀疑有一个简单的解决方案仍在使用alias
。我看起来像是把你传递给alias
的表达推得太过分了。请考虑将代码放在shell脚本中,并将该脚本添加到搜索路径中的目录中。