我有一個問題,變數的內容是一個帶星號的路徑。
例如:
- ./script
- /config
- /export
- /home/* 。
#!/bin/bash
#
dir=()
for i in $@; do
dir ="$i"。
done
這個變數來自啟動腳本時的用戶輸入。
但是一旦我使用這個變數,bash就會將/home/*擴展到/home下的所有檔案夾。
我想用一個測驗陳述句來檢查這個變數,如果有一個星號,就運行一個命令。
for i in ${dir[*]}; do>
if [[ "$i" == *"*"* ]。then find $i -maxdepth 1 -type d
fi
done done
你是否知道如何正確操作,或者建議如何用不同的方式來避免這種情況?
uj5u.com熱心網友回復:
大多數變數的擴展(除了極少數例外)都應該用雙引號。然后你可以處理(幾乎)任意的引數。兩個隨機的例子:
check_asterisk_v1() {
local a
for a in "$@"; do
[[ "$a" == *'*'* ]] & &
echo "引數'${a}' 包含一個星號"。
done
echo "${#} arguments in total"
}
check_asterisk_v2() {
local -ar args=("$@"/span>)
local -i i
for i in "${!args[@]}"; do
[[ "${args[i]}" == *'*'/span>* ]] &&
echo "$((i 1)). 引數'${args[i]}' 包含星號"
完成了。
echo "${#args[@]} arguments in total"
}
check_asterisk_v1 a '*'/span> b '**'/span> c '**'/span> d
check_asterisk_v2 a '*' b '**' c '**' d
作為題外話,讓我指出,你的for-cycle看起來是錯誤的。這將字串附加到陣列dir的第一個元素(索引0)(這沒有什么意義):
dir=()
for i in "$@"; do dir ="$i"; done
這是在陣列dir中追加元素(你可能真的打算這么做):
dir=()
for i in "$@"; do dir =("$i"); done
這是一個更簡單的方法來實作相同的結果:
dir=("$@"/span>)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/316204.html
標籤:
上一篇:根據陣列內容選擇PHP變數的值
