![引用包含变量的命令行参数,该变量在其扩展中可能同时包含单引号和双引号](https://linux22.com/image/167195/%E5%BC%95%E7%94%A8%E5%8C%85%E5%90%AB%E5%8F%98%E9%87%8F%E7%9A%84%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0%EF%BC%8C%E8%AF%A5%E5%8F%98%E9%87%8F%E5%9C%A8%E5%85%B6%E6%89%A9%E5%B1%95%E4%B8%AD%E5%8F%AF%E8%83%BD%E5%90%8C%E6%97%B6%E5%8C%85%E5%90%AB%E5%8D%95%E5%BC%95%E5%8F%B7%E5%92%8C%E5%8F%8C%E5%BC%95%E5%8F%B7.png)
在尝试正确引用命令字符串失败后,我最终使用以下命令对工作目录下的 .jpg 文件运行识别命令,其名称可能包含单引号和/或双引号:
for f in *.jpg; do
xterm -e bash -c "identify -verbose \"${f/\"/\\\"}\" | less"
done
然而,我意识到使用字符串替换构造的变量扩展与 POSIX 不兼容。
那么,您建议使用什么方式来引用可能扩展为带有单引号和双引号的字符串的命令行参数,以及上述命令的 POSIX 兼容语法是什么?
答案1
您可以将文件名作为参数传递给命令字符串:
for f in *.jpg; do
xterm -e bash -c 'identify -verbose "$1" | less' bash "$f"
done