私はこれを持っています:
function abash {
if [[ -v $1 ]]
then
atom ~/Shell/$1.sh
else
atom ~/.bashrc
fi
}
Atomを使用してbashスクリプトを編集しやすくするために、私のファイルに入力が存在するかどうかを確認する必要がありますが、有効な入力を提供しても存在しないようです~/.bashrc
。編集したい)がabashで開きます。この問題をどのように解決できますか?テストのアイデアはどこで得ましたか?[[ -v $1 ]]
$1
abash cd
~/Shell/cd.sh
~/.bashrc
[[ -v $1]]
これ答え。
答え1
なぜ失敗するのかよくわかりませんが、(少なくとも)2つの異なる可能なオプションがあります。[[ -v $1 ]]
代わりに、次のいずれかのオプションを使用できます。
パラメータの数が0より大きいことを確認してください。
[[ $# > 0 ]]
最初のパラメータが空でないことを確認してください。
[[ $1 != '' ]]
答え2
bash
条件式-v var
の確認シェル変数ネーミングがvar
設定されました。
使用すると、実際には[[ -v $1 ]]
内容に応じて名前付き変数が設定されていることを確認します。$1
あなたの場合は$cd
設定されていないことを意味します。
$1
以下を使用して、空でない文字列かどうかを簡単に確認できます-n
。
function abash {
if [[ -n "$1" ]]
then
atom ~/Shell/"$1.sh"
else
atom ~/.bashrc
fi
}
var
必ずなければならないことを参考にしてくださいシェル変数仕事-v var
。次のように表現されるので、決して[[ -v 1 ]]
機能しません。1
位置パラメータ。
答え3
試験に必要なもの名前var、タグ名を使用してください。変数aをテストするには:いいえ`[[ -v $a ]] を実行すると、次のようになります。
[[ -v a ]]
-v
ただし、デフォルトでは位置パラメータに名前がないため、位置パラメータをテストする方法はありません。または、必要に応じて数値であり、テストは数値に適用されません。
-v
したがって、次のコマンドを使用せずにvarを直接テストする必要があります。
[[ ${1:+present} ]]
返品:
var拡張子を引用する必要があります。
私はチルダの代わりに$ HOMEを使用することを好みます。引用符付き文字列を受け入れます。
abash() {
if [[ ${1:+present} ]]
then
atom "$HOME/Shell/$1.sh"
else
atom "$HOME/.bashrc"
fi
}
正解はこれに似て:
しかし、それがうまくいくように私が含めたものを覚えておいてください。