問題背景:
#!/bin/sh
PHP=100;
JAVA=101
LANGUAGE="PHP JAVA"
for lang in $LANGUAGE
do
//這裡想逐行輸出100, 101 該怎麼寫呢?
done
解決方案-數字字串:
#!/bin/sh PHP=100;
JAVA=101
LANGUAGE="PHP JAVA" for lang in $LANGUAGE do
echo $[$lang]
done
解決方案-字母字串:
#!/bin/sh
LANGUAGE=(PHP JAVA)
LANGUAGE_VALUE=(/data/1 /data/2)
for ((i=0;i< ${#LANGUAGE[@]};i++))
do
echo ${LANGUAGE_VALUE[$i]}
done
shell 指令碼匯出環境變數
如果你想用一個bash指令碼來匯出一些環境變數給bash shell使用,就會碰到一些問題。因為每一個bash指令碼是唯一的一個會話,這些環境變數只會在其自己的指令碼裡起作用,對於下一次要用到的這些環境變數,bash shell中還是不存在。
例如:
在 env.sh 指令碼中包含有下面的語句:
export HELLO=hello
export HELLO2=world
當你運行完 env.sh 以後,再接著執行 echo $HELLO $HELLO2 在bash shell中,你不會得到任何東西。
正確的匯出環境變數的方法是 使用source命令來從你的bash指令碼中匯出環境變數。
$ source env.sh
$ echo $HELLO $HELLO2
$ hello world
你能放env.sh指令碼到 /usr/bin 目錄下,接著在任何路徑下執行 source env.sh ,它都能很好地工作。在這裡你要使用source命令來代替直接執行運行指令碼。但我意識到,很多使用者沒有意識到source命令的作用。
在linux的世界中,你還有另外一種方法來使用這些環境變數在單獨的一個環境中,而不影響其他shell的使用。就是
bash -i
通過bash指令碼建立一個新的互動bash會話,當你不在使用它的時候,通過exit來退出即可。
下面為例子:
############################################
build_arm.sh
#!/bin/bash
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
export PS1="\e[31mBUILD_ARM \w \e[m\n\$"
############################################
$ bash -i
接著,
$./build_arm.sh
BUILD_ARM ~ $
當你不在使用它的時候,
BUILD_ARM ~ $ exit
$
這樣就退出到起初的bash shell了。