Bash 将字符串作为命令行参数传递时,转义如何工作?
我正在将此格式的日期2013年3月2日传递给awk脚本,我需要获取与此日期匹配的所有记录,如果我不使用脚本直接执行此操作,我必须跳出正斜杠Bash 将字符串作为命令行参数传递时,转义如何工作?,bash,sed,awk,Bash,Sed,Awk,我正在将此格式的日期2013年3月2日传递给awk脚本,我需要获取与此日期匹配的所有记录,如果我不使用脚本直接执行此操作,我必须跳出正斜杠 awk '$4 ~ /02\/03\/2013/ {print $1}' 但是,如果它被作为命令行参数发送,我不必转义它,我使用2013年3月2日运行了该脚本,并且修改了awk命令以适应它 有人能解释一下,当我们将字符串作为命令行参数发送时,字符转义是如何工作的吗?对有害输入采取什么预防措施 非常感谢与此相关的任何在线资源。您可以在bash中使用参数扩展
awk '$4 ~ /02\/03\/2013/ {print $1}'
但是,如果它被作为命令行参数发送,我不必转义它,我使用2013年3月2日运行了该脚本,并且修改了awk命令以适应它
有人能解释一下,当我们将字符串作为命令行参数发送时,字符转义是如何工作的吗?对有害输入采取什么预防措施
非常感谢与此相关的任何在线资源。您可以在bash中使用参数扩展:
date=02/03/2013
date=${date//\//\\/} # Backslash all slashes.
awk "\$4 ~ /$date/ {print \$1}" # Prevent bash from expanding $1.
可以在bash中使用参数展开:
date=02/03/2013
date=${date//\//\\/} # Backslash all slashes.
awk "\$4 ~ /$date/ {print \$1}" # Prevent bash from expanding $1.
正斜杠在正则表达式中不是特殊字符。需要对其进行转义的原因是,正则表达式常量使用正斜杠本身作为界限。使用解释为正则表达式的字符串时,不使用这些字符串,因此不需要转义斜杠
awk '$4~dd{print $1}' dd=02/03/2013
也许可以使用精确匹配代替正则表达式匹配
awk '$4==dd{print $1}' dd=02/03/2013
正斜杠在正则表达式中不是特殊字符。需要对其进行转义的原因是,正则表达式常量使用正斜杠本身作为界限。使用解释为正则表达式的字符串时,不使用这些字符串,因此不需要转义斜杠
awk '$4~dd{print $1}' dd=02/03/2013
也许可以使用精确匹配代替正则表达式匹配
awk '$4==dd{print $1}' dd=02/03/2013
不要这样做,这样做既麻烦又容易出错。请参阅@Scrutnizer的答案以了解正确的方法(尽管我会使用-v var=value)。不要这样做,这样做既麻烦又容易出错。有关正确的方法,请参见@Scrutnizer的答案(尽管我会使用-v var=value)。