在多个脚本中共享包含空格的文件列表

Sharing a list of files containing spaces in multiple scripts

我有一个文件名列表(包含空格),我想在多个脚本中使用这些文件名。

脚本 1:
myprog.py 我最喜欢的文件

脚本 2:
for f in 我最喜欢的文件

我曾尝试使用环境变量,但由于空格而失败。 我该怎么做?

python foo.py:

#!/usr/bin/python3
import sys 

for f in sys.argv:
    print(f)

bash:

foo=("my favorite" "files")
./foo.py "${foo[@]}"

输出:

./foo.py
my favorite
files

PS:使用您最喜欢的互联网搜索引擎搜索“bash 数组”

假设一个文件中包含您的列表。

$: cat lst
this file.txt
my favorite.csv
that other.mpg

为简单起见,这是您的其中一个程序的我的版本。

$: cat script1
for f in "$@"; do echo "$f"; done

所以如果我理解正确的话,你是这样调用它的,并且得到了这种错误的结果:

$: ./script1 this file.txt my favorite.csv that other.mpg
this
file.txt
my
favorite.csv
that
other.mpg

首先,阅读正确的引用。

$: ./script1 "this file.txt" "my favorite.csv" "that other.mpg"
this file.txt
my favorite.csv
that other.mpg

并尝试使用数组。

$: mapfile -t ary < ./lst
$: ./script1 "${ary[@]}"
this file.txt
my favorite.csv
that other.mpg

这也适用于脚本。尝试只传递包含列表的文件的名称,然后让您的程序读取它。