Tôi có một hàm bash để đặt $PATHnhư thế này -
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
}
Nhưng vấn đề là, tôi phải viết hàm khác nhau cho các biến khác nhau (ví dụ: hàm khác cho $CLASSPATHlike, assign-classpath()v.v.). Tôi không thể tìm cách chuyển đối số cho hàm bash để tôi có thể truy cập nó bằng cách tham chiếu.
Sẽ tốt hơn nếu tôi có một cái gì đó như -
assign( bigstr, substr )
{
if [ -z bigstr ]; then
bigstr=substr;
elif [[ bigstr != *str* ]]; then
bigstr=bigstr:substr;
fi
}
Bất kỳ ý tưởng, làm thế nào để đạt được một cái gì đó như trên trong bash?
assign-path /abcsẽ không thêm /abcvào PATH nếu $ PATH đã chứa /abc/def, /abcd, /def/abcvv Đặc biệt bạn không thể thêm /binnếu PATH đã chứa /usr/bin.
$PATHvà phủ nhận kiểm tra đối với các đối số của bạn như : add=/bin dir=/usr/bin ; [ -z "${dir%"$add"}" ] || dir="${dir}:${add}". Trong câu trả lời của tôi, tôi làm theo cách này với nhiều đối số mà bạn muốn chỉ sử dụng IFS=:.
$PATH? và Thêm thư mục vào $PATHnếu nó chưa có (trên Super User ).