我经常以交互方式循环例如我的文件并希望对所有文件执行特定操作,假设我想重命名所有文件:
for file in $(ls); do mv "$file" "${file}_new"; done
这工作正常。但是在调用这个命令之前,我想看看它实际上做了什么,所以我会在前面添加一个 echo
for file in $(ls); do echo mv "$file" "${file}_new"; done
然后它会向我显示它会调用的所有命令。如果我对它们感到满意,我会删除echo
并执行它。
但是,当命令更微妙时,可能包括管道或多个命令,这不再起作用。当然我可以使用'
这样特殊字符不会被解释,但是我没有参数扩展。我也可以转义特殊字符,但这会变得非常乏味。
我的问题是,最好的方法是什么?我已经阅读了man bash
有关选项的信息-n
,它执行“读取命令但不执行它们。这可用于检查 shell 脚本的语法错误。交互式 shell 会忽略它。” 这正是我所需要的,但我需要它用于交互式外壳。请注意,选项-x
或-v
没有帮助,因为它不仅会显示命令,还会调用它,然后可能已经太晚了。