Bash 的数组与 ls 的奇怪行为

  • 本文关键字:ls 数组 Bash bash
  • 更新时间 :
  • 英文 :


免责声明:我对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输出

最新更新