【发布时间】:2018-12-31 16:04:56
【问题描述】:
假设我有这个脚本,test.sh:
for ix in "$@"; do
echo -$ix-;
done
编辑:test.sh 只是另一个命令行程序的替代品,比如vlc - 所以我需要它的参数是正确的文件名;我不需要自己修改test.sh!
...以及这些文件:
touch "ftest one.mp3"
touch "ftest two.mp3"
touch "ftest three.mp3"
如果我这样做,我会得到正确的输出:
$ bash test.sh ftest*
-ftest one.mp3-
-ftest three.mp3-
-ftest two.mp3-
现在,我想随机化这个列表 - 使用 shuf;但在这种微不足道的情况下,单词是分开的:
$ bash test.sh $(ls ftest* | shuf)
-ftest-
-one.mp3-
-ftest-
-two.mp3-
-ftest-
-three.mp3-
如果我引用子流程部分,那么我会得到一个巨大的字符串 - 仍然不是我想要的:
$ bash test.sh "$(ls ftest* | shuf)"
-ftest two.mp3 ftest one.mp3 ftest three.mp3-
那么,我该如何重写子进程,所以当用作test.sh 的参数时,它将提供正确的文件名和空格?
【问题讨论】:
-
bash test.sh *.mp3 | shuf? -
谢谢@Cyrus - 但这个
test.sh是另一个程序的替代品;我需要将正确的文件作为参数放入其中 -
cvlc --random *.mp3?
标签: bash