在多个脚本中共享包含空格的文件列表
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
这也适用于脚本。尝试只传递包含列表的文件的名称,然后让您的程序读取它。
我有一个文件名列表(包含空格),我想在多个脚本中使用这些文件名。
脚本 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
这也适用于脚本。尝试只传递包含列表的文件的名称,然后让您的程序读取它。