この質問は譲受人ある変数の内容全体を別の変数にコピーします。
変数が存在しません使用される(背中に送るecho
)
いいえパラメータ拡張作業中に完了しました。
私の質問はPOSIXシェルにのみ関連しています(ここでは配列は使用されません)。
error="You have an error in your input"
newVar="$error"
# vs.
newVar=$error
# ↑
# └─This assignment is the question. It doesn't seem that quotes are
# needed here in order to assign the entire contents of $error to
# a new variable.
# ┌─(But quotes are required when they're used.)
# ↓
printf "%s\n" "$error"
# => You have an error in your input
printf "%s\n" "$newVar"
# => You have an error in your input
私の記事に私が逃したトラップがありますかnewVar=$error
?
修正する:
の内容にかかわらず、エラーが発生したり、データが破損することなく$error
同じデータが保持されるかどうかを知りたいです。$newVar
$ error="Test * ${1} \n [!a] [[:punct:]] ./test \t \n \\"
$ newVar=$error
# ↑
# └─Does this step ever fail or cause the two variables to differ?
$ echo "$error"
Test * \n [!a] [[:punct:]] ./test \t \n \
$ echo "$newVar"
Test * \n [!a] [[:punct:]] ./test \t \n \
答え1
Bourneに似たシェル(一部のシェルの以前の実装でバグ1を忘れた場合)
var=$otherVar
とても良いです。スカラー変数に割り当てるので、ここではglob + splittingを使用できないため、作成する必要はありませんvar="$otherVar"
(ここでは引用符は問題ではありませんが)。
例外は次のとおりです。
var=$*
そして:
var=$@
.は、最初の文字が空白でない場合にのみ使用する必要がありますvar="$*"
。var=$@ var=$* var="$@"
$IFS
もちろん次のようになります。
array=("$var")
引用符が必要です。それ以外の場合、配列要素は分割+グロービングの結果として割り当てられます$var
。
また、次の引用符が必要です。
export var="$otherVar"
多くのシェルがあります(ここには単純なコマンドがあるため、分割+グローブが発生します)。
そして:
env var="$otherVar" cmd
または
awk -v var="$otherVar"...
疑わしい場合は、引用符を使用してください。
一部の以前のバージョンでは、シミュレーションzsh
時にワイルドカード文字の前にバックスラッシュの問題がありましたsh
。
$ (a='\*' exec -a sh zsh-3.1.9 -c 'b=$a; printf "%s\n" "$b"')
*
$ (a='\*' exec -a sh zsh-3.1.9 -c 'b="$a"; printf "%s\n" "$b"')
\*
これはずっと前に解決されました。