首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法理解bash shell参数展开。

无法理解bash shell参数展开。
EN

Unix & Linux用户
提问于 2021-02-26 17:01:08
回答 1查看 106关注 0票数 3

完全痴迷于以下命令:

代码语言:javascript
复制
declare -a partition_files
readarray -d '' partition_files < <(find "$choosen_image_folder" -name "*sda${i}.gz*")

# this does not work
/bin/cat "${partition_files[*]}" | /bin/gunzip -f -c | ntfsclone -r -O "/dev/sda$i" -
# this does work
/bin/cat ${partition_files[*]} | /bin/gunzip -f -c | ntfsclone -r -O "/dev/sda$i" -
# this does not work
/usr/sbin/partimage restore -b "/dev/sda$i" "${partition_files[*]}"
# this does work
/usr/sbin/partimage restore -b "/dev/sda$i" ${partition_files[*]}

为什么在这种情况下,删除引号是有效的,与引号是无效的?

EN

回答 1

Unix & Linux用户

发布于 2021-02-26 17:10:18

"${partition_files[*]}"将所有数组元素连接到一个shell字,使用IFS的第一个字符作为合并器。因此,如果数组是a=("foo bar" asdf),而IFS具有默认值,则得到与"foo bar asdf"相同的值。

相反,您需要"${partition_files[@]}",它使每个元素成为一个不同的单词,因此与"foo bar" "asdf"相同。

这与"$@""$*"之间的区别是一样的,通常,除非您知道自己正在做一些特别的事情,否则您总是希望使用"$@""${array[@]}" (带有符号和引号)。

如果不使用引号进行${array[*]}操作,则可以分别获得所有元素,然后每个单词再次拆分。(如果IFS不是空字符串,它基本上与连接的所有元素相同,然后是组合字拆分。)

参见例如https://www.gnu.org/software/bash/manual/html_节点/特殊-Parameters.html

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/636590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档