main.shに次のものがあるとします。
$NAME="a string"
if [ -f $HOME/install.sh ]
. $HOME/install.sh $NAME
fi
そしてinstall.shから:
echo $1
これはechoになっていますが、"a string"
何もエコーしません。なぜ?
答え1
マイケル・モロジェほとんどの問題に対処しており、Bashを使用しているので、彼の修正はうまくいくでしょう。
パラメータを使用してスクリプトを取得する機能が恥ずかしいことに興味があるかもしれません。または、sh
ソーススクリプトのパラメータが無視され、パラメータが引用されるため、何もエコーされません。dash
main.sh
$1
main.sh.
からスクリプトをインポートすると、sh
ソーススクリプトのテキストをソーススクリプトファイルにコピーして貼り付けたのと同じです。次の点を考慮してください(Michaelが提案した修正を適用しました)。
$ bash ./test.sh
A String
$ sh ./test.sh
$ sh ./test.sh "HELLO WORLD"
HELLO WORLD
答え2
3 つのエラーが表示されます。
割り当て行が正しくありません。
$NAME="a string"
変数に割り当てるときは、以下を含めないでください
$
。NAME="a string"
何か抜けました
then
。条件付き行は次のようになります。if [ -f $HOME/install.sh ]; then
$NAME
空白があっても引用符はありません。ソース行は次のようになります。. $HOME/install.sh "$NAME"
答え3
スクリプトを受け取る前にパラメータを設定するだけです!
メインディレクトリ
#!/bin/bash
NAME=${*:-"a string"}
if [[ -f install.sh ]];
then
set -- $NAME ;
. install.sh ;
fi
exit;
install.sh
#!/bin/bash
echo " i am sourced by [ ${0##*/} ]";
echo " with [ $@ ] as parametr(s) ";
exit;
テスト
u@h$ ./main.sh some args
i am sourced by [ main.sh ]
with [ some args ] as parametr(s)
u@h$