免责声明:我对bash脚本编写相当陌生,可能有一些我不知道的技术问题。
简而言之,我想要ls
一个目录,并动态地为每个输出的文件名添加一个大小写开关,而不管数组大小的大小。
我的脚本的目的是获取文件的名称,然后用sed更新。zshrc中的一行(我省略了这个例子,因为它偏离主题)
代码:
#!/bin/bash
CHOICE=$(ls $HOME/some/dir/here/)
select opt in Quit ${CHOICE[@]}; do
case "$opt" in
"Quit")
echo "Quitting..."
exit 0
;;
esac
for ((i = 0; i < ${#CHOICE[@]}; i++)); do
case "$opt" in
${CHOICE[i]})
echo "You choose "${CHOICE[i]}""
exit 0
;;
esac
done
case "$opt" in
*)
echo "Invalid Input. Exiting without changes..."
exit 0
;;
esac
done
exit 0
预期行为:
1) Quit
2) some
3) options
4) here
#? 2
You choose "some"
实际行为:1) Quit
2) some
3) options
4) here
#? 3
Invalid Input. Exiting without changes...
现在,当我改变:
CHOICE=$(ls $HOME/some/dir/here/)
转换为静态数组,如:
CHOICE=("some" "options" "here")
它工作得很好,但是,诅咒,静态数组不是我想要的。
像这样:
CHOICE=( $HOME/some/dir/here/* )
select opt in Quit "${CHOICE[@]}"; do
使用glob
Thanks tonot解析ls
输出