Linux bashスクリプトでティックコマンドの実行を防ぐ方法

Linux bashスクリプトでティックコマンドの実行を防ぐ方法

$COMMAND2番目のタブで区切られたフィールドを変数に保存したいのですが、$iこれによりコマンドがcd ~実行されます。TEST_CASE_001の間にタブ文字があります。cd ~

i='TEST_CASE_001 cd ~'
COMMAND=$(echo $i | cut -f2)

実行と保存を防ぐ方法は$COMMAND

答え1

注:この回答は質問の最初のバージョンに適用されます。

まず、iタブを使って定義しましょう。

$ i=$'ls -l\tcd ~'

それでは、二重引用符なしでコマンドを実行してみましょう。

$ echo $i | cut -f2
ls -l cd ~
$ echo "$i" | cut -f2
cd ~

期待どおりに機能するには、二重引用符を追加するcut必要があります$i。二重引用符がない場合、シェルは次のことを行います。噴射これにより、タブが空白に置き換えられます。これにより、cutコマンドが期待どおりに機能しなくなります。

コマンドを割り当てても、以下は変更されません。

$ Command=$(echo $i | cut -f2); declare -p Command
declare -- Command="ls -l cd ~"
$ Command=$(echo "$i" | cut -f2); declare -p Command
declare -- Command="cd ~"

一般メッセージ

ここでは、より大きなコンテキストを提供しませんが、通常、コマンドを変数に入れるのは悪い考えです。バラより「コマンドを変数に入れようとしていますが、複雑なケースは常に失敗します!」

また、変数の場合は、COMMANDシェル変数に小文字または大文字と小文字の混合を使用するのが最善です。システムは変数に大文字を使用するため、誤って大文字の1つを上書きしたくありません。

関連情報