#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD" ,"We are here ", $outDir ," with "
"$outDir" = "$PWD"
echo "Yes"
fi
ターミナル出力:
/home/Documents/folderName ,We are here , , with
./pipeline.sh: line 28: : command not found
Yes
現在、ディレクトリを$ outDirに割り当てることはできません。
私は試しましたが、"outDir" = "$PWD"
何も$outDir="$PWD"
動作"$outDir"=$PWD
しません。しかし、echo $PWD
非常にうまく動作します。
なぜできないの働く?
答え1
$PWD
設定されていない値またはnull値を使用してイベントを割り当てたいと思います$outDir
。そうですか?$outDir
私は以下が同じだと思います。
printf 'We are here: "%s"\n $outDir = "%s"\n' \
"$PWD" "${outDir:=$PWD}"
$outDir
割り当てられている場合は2番目のパラメータの値を印刷し、そうでない場合は値printf
も割り当てて印刷します。$PWD
$outDir
もちろん、ここでは変数呼び出しは${outDir:=$PWD}
nullまたは設定されていない値に対して独自に変更されますが、その値が正しいことを確認しません。実際にはディレクトリです。上記の小切手も同様です。おそらく、次のいずれかより良いものは次のとおりです。
cd -- "${outDir:=$PWD}" || exit; cd - >/dev/null
cd
ユーザーの選択が正しいことを確認するだけでなく、$outDir
ユーザーにアクセス権がない場合はエラーも印刷します。テストが成功すると、cd -
テスト前の位置に戻ります。cd
リダイレクトは>/dev/null
単にcd -
印刷を防ぐためのものです$PWD
。それ以外の場合は、この操作を行います。
ただし、ユーザーが1つを指定しない場合、$outDir
その値はbeforeとして指定されます。$PWD
つまり、テストが成功し、cd $PWD
2つの連続したコマンドがここでも-
変わったことを意味します。$OLDPWD
$PWD
答え2
outDir="$PWD"
echo
また:私にとっては、パラメータを1つだけ使用する方が便利です。
echo "${PWD} ,We are here , ${outDir} , with "
このif
テストは次のように置き換えることができます。
if [ -z "$outDir" ]
答え3
最初のechoコマンドの後には改行文字が続くので、"$outDir" = "$PWD"
コマンドとして扱われます。
最初のエコー行に追加することも、"$outDir" = "$PWD"
最初のエコー行の末尾に行連続文字を追加することもできます。
#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD" ,"We are here ", $outDir ," with ", \
"$outDir" = "$PWD"
echo "Yes"
fi
または
#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD" ,"We are here ", $outDir ," with ", "$outDir" = "$PWD"
echo "Yes"
fi
希望の出力を提供します。
[sri@localhost ~]$ ./crap.bsh
./crap.bsh
/home/sri ,We are here , , with , = /home/sri
Yes
これが私の最初の答えのテキストです。 無視。
それは実際に(私の箱で)動作し、私はショックを受けました。まずスクリプト:
#!/usr/bin/env bash
if [ "$outDir" == "" ]
then
echo "$PWD", "We are here", $outDir, "$outDir" = "$PWD"
echo "yes"
fi
これが出力です
./test.bsh
/home/chris, We are here, , = /home/chris
yes
私はそれがbashのバージョンに関連していると思います。これは私のものです:
bash --version
GNU bash, version 4.2.45(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
私は20年間BASHスクリプトを書いてきましたが、それがうまくいくとは思いませんでした。スクリプトは、最新バージョンのBASHでサポートされている構文を使用して作成する必要があります。
個人的には、これを達成するために文字列を使用します。私はあなたが以前にしたことを他の人がすることを見たことがありません(私の考えでは素晴らしいです):
echo "$PWD, We are here, $outDir, $outDir = $PWD"
また、一重引用符を使用すると変数の拡張を避けることができることも覚えておいてください。
echo "$PWD"
echo '$PWD'
echo "$(pwd)"
出力:
/home/chris
$PWD
/home/chris