Bash 当设置在同一行上时,echo为什么不考虑IFS?
在bash中,为什么不是这样:Bash 当设置在同一行上时,echo为什么不考虑IFS?,bash,Bash,在bash中,为什么不是这样: declare -a array=(a b c d e) IFS=',' echo "${array[*]}" 同: echo_wrapper() { echo "$*" } declare -a array=(a b c d e) IFS=',' echo_wrapper "${array[@]}" 展开发生在简单命令中的变量赋值之前: 当执行一个简单的命令时,shell从左到右执行以下扩展、分配和重定向 解析器标记为变量赋值(命令名之前的赋值)和
declare -a array=(a b c d e)
IFS=',' echo "${array[*]}"
同:
echo_wrapper()
{
echo "$*"
}
declare -a array=(a b c d e)
IFS=',' echo_wrapper "${array[@]}"
展开发生在简单命令中的变量赋值之前: 当执行一个简单的命令时,shell从左到右执行以下扩展、分配和重定向
IFS
分配,但不执行。步骤2使用IFS
的现有值展开“${array[*]}”
。然后,步骤4更改IFS
的值
解决方法,如果不需要修改流程环境、工作目录等:使用子shell
(IFS=, ; echo "${array[*]}")
不同的解决方法
join () {
local IFS=$1 # changes to IFS are localized to the function
shift
echo "$*"
}
join , "${array[@]}"