回答:
私はこれがあなたが望むことをすると信じています。すべての引数をスペースで区切った1つの文字列に入れ、すべてを単一引用符で囲みます。
str="'$*'"
$*
$IFS
デフォルトでスペースである最初の文字で区切られたすべてのスクリプト引数を生成します。
二重引用符で囲まれた文字列内では、単一引用符をエスケープする必要はありません。
上記をスクリプトファイルに入れてみましょう。
$ cat script.sh
#!/bin/sh
str="'$*'"
echo "$str"
次に、サンプル引数を使用してスクリプトを実行します。
$ sh script.sh one two three four 5
'one two three four 5'
このスクリプトはPOSIXです。動作しますbash
が、必要ありませんbash
。
以下を調整することで、スペースから別のキャラクターに変更できますIFS
。
$ cat script.sh
#!/bin/sh
old="$IFS"
IFS='/'
str="'$*'"
echo "$str"
IFS=$old
例えば:
$ sh script.sh one two three four
'one/two/three/four'
cd "$*"
十分だと思います。
cdm(){ str="$*"; cd "$str"; }
、スコットが示唆するように、またはcdm(){ cd "$*"; }
。また、$*
連続する複数のスペースを単一のスペースに置き換えることに注意してください。ディレクトリ名に複数の連続したスペース、タブ、または改行が含まれる場合、それらの文字は関数に渡す前にエスケープする必要がありcdm
ます。
cdm
ですcdm 'test 2 trial 1'
。これは、奇妙な名前のすべての荘園を処理します。ただし、空白が単一のスペースに制限されている限り、それはcdm
として実行できますcdm test 2 trial 1
。
思っているより簡単です:
#!/bin/bash
array="${@}"
echo $array
chmod + xを実行して実行します。
$ ./example.sh --foo bar -b az
--foo bar -b az