python - 如何在带有变量的bash中运行内联python?
问题描述
我想运行一个 python 内联命令以及我的 bash 脚本中的变量。它在没有导入行的情况下工作。
for filename in *.txt; do
OUT=$(python3 -c "import pprint\nprint('$filename')")
mv $file $OUT
done
但我收到错误消息SyntaxError: unexpected character after line continuation character
。
解决方案
逐字传递,\n
对 Python 没有意义。最方便的解决方法可能是改用分号,Python 支持分号只是为了让您可以在另一种语言的脚本中编写简单的单行代码。
OUT=$(python3 -c "import pprint; print('$filename')")
你也可以传入一个实际的换行符;
OUT=$(python3 -c "import pprint
print('$filename')")
虽然你为什么import pprint
不使用它的时候呢?我猜你想要pprint()
文件名,不是print()
吗?
如果文件名包含文字单引号,这仍然可能失败。在 Python 方面,您可以通过将字符串读取为命令行参数来解决此问题。
OUT=$(python3 -c "import pprint, sys; pprint.pprint(sys.argv[1])" "$filename")
顺便说一句,您不应该为您的私有 shell 变量使用大写字母,并引用该变量。
for filename in ./*.txt; do
out=$(python3 -c "import pprint, sys; pprint.pprint(sys.argv[1])" "$filename")
mv "$file" "$out"
done
添加./
的内容避免了以破折号开头的文件名将被解析为mv
. 实际上,更好的重构是执行重命名——也许还有循环!- 在 Python 中。在 shell 脚本中正确传递文件名并在工具之间完整地引用等比它应该的更具挑战性。
python3 -c 'import pprint, sys, shutil; for file in sys.argv[1:]: shutil.move(file, pprint.pformat(file))' ./*.txt
推荐阅读
- .net - GithubActions CI Windows VM 不再有 fsi.exe 了吗?或者它改变了位置
- c# - 如何在c#中根据日期拆分字符串数据
- swift - 使用 swift (Firebase 数据库) 更新 Post 中的点赞数
- flutter - geoflutterfire 流到未来
- angular - Angular - 此条件将始终返回“true”,因为“void”和“string”类型没有重叠。ts(2367)
- javascript - Axios Put 请求未更新数据 | 反应还原
- java - 如何根据货币代码在不同的单元格中设置不同的货币
- c# - 实现 ?: 带有 DialogResult Boxes C# 的运算符
- arrays - 在 Svelte 中将每个循环嵌套在数组上 - 如何设置唯一的 id / key?
- batch-file - 批量制作文本文件输入未复制