我正在尝试拆分键值对(围绕 = 符号),然后使用 bash 来编辑配置文件。但我需要 IFS 的 <<< 语法的替代方法。
以下适用于我的主机系统,但是当我通过 ssh 登录到我的 ubuntu 虚拟机时,我的 bash 版本错误。无论我尝试什么,<<< 都会失败。(我肯定会在文件顶部调用正确版本的 bash,使用 #!/bin/bash (我也尝试过 #!/bin/sh 等))。
我知道我可以在我的主机 mac os x 系统上使用 IFS,如下所示:
var="word=hello"
IFS='=' read -a array <<<"$var"
echo ${array[0]} ${array[1]]}
#alternative -for calling through e.g. sh file.sh param=value
for var in "$@"
do
IFS='=' read -a array <<<"$var"
echo ${array[0]} ${array[1]]}
done
#alternative
IFS='=' read -ra array <<< "a=b"
declare -p array
echo ${array[0]} ${array[1]}
但这在我的虚拟机上不起作用。
我也知道我应该能够通过反引号切换 <<< 语法,$()
或者echo "$var" | ...
但我无法让它工作 - 如下:
#Fails
IFS='=' read -ra myarray -d '' <"$var"
echo ${array[0]} ${array[1]]}
#Fails
echo "$var" | IFS='=' read -a array
echo ${array[0]} ${array[1]]}
#fails
echo "a=b" | IFS='=' read -a array
declare -p array
echo ${array[0]} ${array[1]}
感谢任何指针,因为我对 bash 真的很陌生。