繁体   English   中英

声明对zsh和bash有效的数组

[英]Declaration of an array valid for zsh and bash

我正在寻找一种声明将在bash和zsh中工作的数组的方法。

我知道我可以在bash中简单地做到这一点:

file_list=$(example_command)

在zsh中,我可以使它像这样工作:

file_list=($(example_command))

我知道只要愿意,我就可以使用if语句来做到这一点,但是希望不要:

if [ `basename $SHELL`=bash ]; then
    file_list=$(example_command)
elif [ `basename $SHELL`=zsh ]; then 
    file_list=($(example_command))
else
    echo "ERROR: UNKNOWN SHELL"
fi

我不太在乎其他shell(例如sh)。 只是寻找在zsh和bash中工作的东西,看起来不太奇特。

您对bash的假设是错误的。 file_list=$(example_command) 不在此处创建数组。 file_list=( $(example_command) ) 确实在两个shell中都创建了一个数组,尽管这样做不是一个好习惯(不能处理带有空格的文件,名称可以扩展为glob的文件,等等)。

下面是一个很好的实践方法(只要你可以调用一个新行分隔流良好做法处理文件名时,换行符可以在文件名中的文字),在这两种弹的工作原理:

file_list=( )
while IFS= read -r line; do file_list+=( "$line" ); done < <(example_command)

重要的是,要以在两个shell中都可以使用的方式使用数组,您需要将其扩展为"${file_list[@]}" ,而不是$file_list

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM