我正在尝试跟随。
echo $FCMAN |cut -d'.' -f1 | read FCMAN1
echo $FCMAN |cut -d'.' -f2 | read FCMAN2
echo $FCMAN |cut -d'.' -f3 | read FCMAN3
echo $FCMAN |cut -d'.' -f4 | read FCMAN4
$FCMAN
的价值如下所示。
QLogic Corp. QLogic Corp. QLogic Corp. QLogic Corp.
我希望结果会有四个变量。
$FCMAN1 = QLogic Corp.
$FCMAN2 = QLogic Corp.
$FCMAN3 = QLogic Corp.
$FCMAN4 = QLogic Corp.
有人能帮帮我吗?
答案 0 :(得分:0)
我改用阵列。 mapfile
bash builtin将行读入数组:
FCMAN="QLogic Corp. QLogic Corp. QLogic Corp. QLogic Corp."
mapfile -t fcmen < <( tr . '\n' <<<"$FCMAN")
declare -p fcmen
# ==> declare -a fcmen='([0]="QLogic Corp" [1]=" QLogic Corp" [2]=" QLogic Corp" [3]=" QLogic Corp" [4]="")'
答案 1 :(得分:0)
你说你的脚本应该在所有类型的Unix上运行;那么,您期望在哪里使用哪种外壳(或其他工具)?即使你指望sh
(Bourne Shell),它也会有所不同:在Linux上,sh
只是调用bash
,虽然应该是向上兼容,但不是每个Bourne shell脚本在bash下执行时产生相同的结果,如this article所示。
使用Korn Shell,差异甚至更大 - 不同的实现,一个实现行的不同版本。某些设置可能甚至没有在/ usr / bin中安装Korn Shell。
如果您对原始代码的结果感到满意,可以使用循环使其更加优雅:
for n in 1 2 3 4
do
echo $FCMAN|cut -d'.' -f$n|read FCMAN$n
done
另一种可能性是使用Perl
。虽然不一定是每个 Unix安装的一部分,但我还没有看到没有安装Perl的地方。虽然你有许多不同的Perl版本,但它肯定会是一些5.xx版本,你的情况很简单,可以用它来处理任何Perl版本。