假设我在bash中有一个字符串-
NAMES="file1 file2 file3"
Run Code Online (Sandbox Code Playgroud)
如何将其映射到以下字符串,然后将其用作命令的一部分?
MAPPED="-i file1.txt -i file2.txt -i file3.txt"
Run Code Online (Sandbox Code Playgroud)
为了确切说明我的意思,下面是等效的python代码-
names = "file1 file2 file3"
mapped = ' '.join("-i " + x + ".txt" for x in names.split())
Run Code Online (Sandbox Code Playgroud)
您应该使用数组而不是字符串:
names=(file1 file2 file3)
# Add suffix
names=("${names[@]/%/.txt}")
# Build new array with "-i" elements
for name in "${names[@]}"; do
mapped+=(-i "$name")
done
# Show result
declare -p mapped
Run Code Online (Sandbox Code Playgroud)
产生以下输出:
declare -a mapped=([0]="-i" [1]="file1.txt" [2]="-i" [3]="file2.txt" [4]="-i" [5]="file3.txt")
Run Code Online (Sandbox Code Playgroud)
现在可以在以下命令中使用它:
cmd "${mapped[@]}"
Run Code Online (Sandbox Code Playgroud)
有关将命令放入字符串与数组的基本原理,请参阅BashFAQ / 050。
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |