我在路径中选择了 Nemo 中的 4 个文件/home/myUsername/.local/share/nemo/scripts/Folder with spaces/
。Nemo 将文件路径存储在环境变量中NEMO_SCRIPT_SELECTED_FILE_PATHS
。
(正如您在下面的答案中看到的glenn jackman
,NEMO_SCRIPT_SELECTED_FILE_PATHS
包含一个以换行符分隔的文件路径列表。)
为什么不是每个文件路径行后都打印“Yeah!”?我该如何实现?(这个问题可能很烦人,因为我最初以为这个文件路径列表是一个数组,但显然不是。)
脚本
#!/bin/bash
for i in "${NEMO_SCRIPT_SELECTED_FILE_PATHS[@]}"
do
echo "$i"
echo "Yeah!"
done
输出
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script1
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script2
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script3
/home/myUsername/.local/share/nemo/scripts/Folder with spaces/script4
Yeah!
答案1
假设:
- 环境变量
$NEMO_SCRIPT_SELECTED_FILE_PATHS
以某种方式由 Nemo 神奇地为你设置,并且 - 它包含一个以换行符分隔的文件名列表,
你可以将它解析成一个 bash 数组,如下所示:
$ NEMO_SCRIPT_SELECTED_FILE_PATHS="file one
file two
file three"
$ mapfile -t files <<<"$NEMO_SCRIPT_SELECTED_FILE_PATHS"
$ echo ${#files[@]}
3
$ printf ">>%s\n" "${files[@]}"
>>file one
>>file two
>>file three
mapfile
是 bash 内置命令,它读取标准输入,在换行符处分割并将行存储在命名数组中。
如果您的任何文件名包含换行符(这是一个合法的文件名字符),则会出现这种情况。