我正在嘗試像在 C 中一樣決議 args:
if (str[i] == something && str[i 1] == something) {
//do somthing
}
我不知道該怎么做str[i 1]。這是我嘗試過的:
for a in $@ ; do
if [ $a == "create" ] && [sed 's/table/']; then
echo "create database"
fi
done
如果我找到了create,我會嘗試做一些事情,如果create有的話database。
uj5u.com熱心網友回復:
在 bash 中,我們可以使用間接變數來做同樣的事情:
for ((i = 1, j = 2; i < $#; i , j )); do
if [[ ${!i} == "create" && ${!j} == "database" ]]; then
echo "create database
break
fi
done
這種技術不會像這樣做那樣消耗引數shift。
Ref: 3.5.3 Shell 引數擴展第 4 段
關于您的代碼的幾點:
for a in $@ ; do
if [ $a == "create" ] && [sed 's/table/']; then
echo "create database"
fi
done
- 總是參考
"$@"——這是保持"arguments with whitespace"在一起的唯一方法。 - 在 bash 中,使用
[[...]]而不是[...]-- 雙括號形式對于未加引號的變數更安全。 - 括號不僅僅是語法,
[是一個命令。對于外部命令,不要使用方括號:if [[ $a == "create" ]] && sed 's/table/other/' some_file; thenhelp if在 bash 提示符下 仔細閱讀。
uj5u.com熱心網友回復:
您可以在帶有標志的回圈中執行此操作,但執行此類操作的通常方法是在使用引數時轉換引數。就像是:
#!/bin/sh
while test $# -gt 0; do
case $1 in
create) shift; echo "arg after create is '$1'";;
# ...
esac
shift
done
uj5u.com熱心網友回復:
#!/bin/bash
if [[ $1 == create ]] && [[ $2 == table ]]
then
echo "create database"
fi
uj5u.com熱心網友回復:
你可以稱之為作弊,但你可以將 $@str最初放入一個陣列中:
str=( "$@" )
i=... # Whatever you need
if [[ ${str[$i]} == something && ${str[$((i 1))]} == something ]]
then
....
這是最接近的。但是,在實踐中,重新考慮您的演算法通常更方便,而不是彎曲一種語言以使其看起來與您已經熟悉的語言相似。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/408879.html
標籤:
