以下のコマンド、特に太字の部分を理解しようとしています。
2行目が何であるかを理解します。ファイルが存在するかどうかをテストし、存在しない場合はファイルを生成しますが、何ですか?$_1/
意味は?
test "$1" = "0" && exit
test -f $_1/samplefile || touch $_1/samplefile
ベストアンサー1
$_1
「拡張変数」を意味します_1
。この変数は設定されていないため、空の状態に展開されます。誰かが間違いを犯した可能性があります。
人間の考えは次$_1
のようになります。${_}1
$_
前のコマンドの最後のパラメーター。)、番号に接続されます1
。しかし、以下のように同じではありません。
$ cat tst.bash
#!/bin/bash
test "$1" = "0" && exit
echo $_
test "$1" = "0" && exit
echo $_1
test "$1" = "0" && exit
echo ${_}1
$ ./tst.bash
0
01
スクリプトに引数として数字0以外の項目を指定すると(上記の例では引数をまったく提供しません)、失敗してtest
実行exit
されません。したがって、各に対してecho
最後に実行されたコマンドは次のようになります。
test "$1" = "0"
、最後のパラメータはです0
。したがって$_
、に展開され0
、${_}1
拡張され01
、$_1
空の文字列に展開されます。