Saya memiliki fungsi bash untuk mengatur $PATH
seperti ini -
assign-path()
{
str=$1
# if the $PATH is empty, assign it directly.
if [ -z $PATH ]; then
PATH=$str;
# if the $PATH does not contain the substring, append it with ':'.
elif [[ $PATH != *$str* ]]; then
PATH=$PATH:$str;
fi
}
Tetapi masalahnya adalah, saya harus menulis fungsi yang berbeda untuk variabel yang berbeda (misalnya, fungsi lain untuk $CLASSPATH
suka assign-classpath()
dll.). Saya tidak dapat menemukan cara untuk meneruskan argumen ke fungsi bash sehingga saya dapat mengaksesnya dengan referensi.
Akan lebih baik jika saya memiliki sesuatu seperti -
assign( bigstr, substr )
{
if [ -z bigstr ]; then
bigstr=substr;
elif [[ bigstr != *str* ]]; then
bigstr=bigstr:substr;
fi
}
Ada ide, bagaimana mencapai sesuatu seperti di atas di bash?
assign-path /abc
tidak akan menambahkan /abc
ke PATH jika $ PATH sudah berisi /abc/def
, /abcd
, /def/abc
dll Terutama Anda tidak dapat menambahkan /bin
jika PATH sudah berisi /usr/bin
.
$PATH
dan uji meniadakan terhadap argumen Anda seperti: add=/bin dir=/usr/bin ; [ -z "${dir%"$add"}" ] || dir="${dir}:${add}"
. Dalam jawaban saya, saya melakukannya dengan argumen sebanyak yang Anda suka IFS=:
.
$PATH
? dan Tambahkan direktori $PATH
jika belum ada (di Super User ).